Прикрепление категорий из одной таблицы к записям в другой MySQL - PullRequest
1 голос
/ 21 июня 2011

У меня есть база данных, которая принимает данные, предоставленные пользователем, записи, из которых я хочу сгруппировать их в одну или несколько из 10 категорий.

Так, например, вы добавляете свою запись на мой сайт, говорите все о своем бизнесе (услуга автомобильной парковки), и я предлагаю вам возможность классифицировать вашу запись в любом количестве из 10 фиксированных категорий (автомобильная)(мобильный сервис и т. д.), поэтому, если пользователь выполняет поиск предприятий в категории «автомобильный» или «мобильный сервис», ваш бизнес возвращается из запроса.

Итак, как я взял из большинства ответовздесь для достижения этой цели у меня есть база данных с тремя таблицами (структура ниже), одна для вашей бизнес-записи, одна с перечнем установленных категорий и одна реляционная таблица, в которую я добавил уникальный ключ из двух предыдущих таблиц.

CREATE TABLE `business` (
`bus_id` INT NOT NULL AUTO_INCREMENT, 
`bus_name` VARCHAR(50) NOT NULL, 
`bus_dscpn` TEXT NOT NULL, 
`bus_url` VARCHAR(255) NOT NULL,
PRIMARY KEY (`bus_id`)
)

CREATE TABLE `categories` (
`category_id` INT NOT NULL AUTO_INCREMENT, 
`category_name` VARCHAR(20) NOT NULL, 
PRIMARY KEY (`category_id`)
)

CREATE TABLE `tbl_works_categories` (
`bus_id` INT NOT NULL, 
`category_id` INT NOT NULL
)

Что я не могу понять на всю жизнь, так это когда вы выбираете, с какими категориями вы хотите связать свой бизнес, из моей формы, которая обрабатывается с помощью PHP, как на самом деле связать их в базе данных!

Ответы [ 3 ]

1 голос
/ 21 июня 2011

Чтобы получить бизнес-данные со всеми категориями, которые вы можете сделать,

SELECT bus.*, cat.category_name FROM business bus 
    JOIN tbl_works_categories twc USING (bus_id) 
    JOIN categories cat USING (category_id) 
    WHERE bus.bus_id = ?

Чтобы извлечь бизнес-данные из названия категории, просто переключите параметр WHERE

SELECT bus.*, cat.category_name FROM business bus 
    JOIN tbl_works_categories twc USING (bus_id) 
    JOIN categories cat USING (category_id) 
    WHERE cat.category_name = ?
0 голосов
/ 21 июня 2011

Я согласен с вами, что это просто. Возможно, это ответит на ваши вопросы.

Я предполагаю, что в вашей форме есть флажки или поле множественного выбора, позволяющее пользователю выбирать категории для своего бизнеса. И что атрибут «значение» флажка / выбора установлен на идентификатор категории, как хранится в таблице categories. Итак, теперь, когда форма отправлена, вы получите в сценарии PHP вместе с другими входными данными формы массив с идентификаторами категорий, выбранных пользователем. Давайте назовем это $ _POST ['category']

МЕТОД 1 :

а. Запустите запрос - INSERT INTO business ...

б. прочитайте идентификатор последней записи, внесенной в таблицу business, используя mysql_insert_id или mysqli->insert_id, в зависимости от того, используете ли вы библиотеку MySQL или MySQLi. Предположим, вы храните этот идентификатор в $busId

с. Из $ _POST ['category'] создайте строку через запятую, используя implode(). Предположим, вы храните эту строку в $strCategories

* * 1 022 д.
INSERT INTO `tbl_works_categories` (`bus_id`, `category_id`)
SELECT $busId, `category_id`
FROM `categories`
WHERE `category_id` IN ($strCategories);

МЕТОД 2 :

В качестве альтернативы, вы также можете перебрать массив POST и сгенерировать запрос INSERT, например:

$q = '';
if (!empty($_POST['categories'])) {
    $q = 'INSERT INTO `tbl_works_categories` (`bus_id`, `category_id`) VALUES ';
    foreach ($_POST['categories'] as $categoryId) {
        $q .= '(' . $busId . ', ' . $categoryId . '),';
    }
}
$q = trim($q, ','); // to remove the trailing comma
if (!empty($q)) {
    // execute query $q
}

Надеюсь, что выше поможет. Я не тестировал ни один из приведенных выше кодов, поэтому вам может потребоваться отладка, если что-то сломалось. Пожалуйста, не стесняйтесь спрашивать, если у вас есть какие-либо вопросы.

0 голосов
/ 21 июня 2011

Я предполагаю, что ваша форма возвращает идентификаторы категорий для каждой выбранной категории и что эти идентификаторы соответствуют category_id в вашей таблице категорий.

Сначала вы вставляете свою бизнес-запись в свою бизнес-таблицу, и это даст вам номер автоматического приращения (функция mysql_insert_id в PHP или любая другая функция для используемой вами библиотеки). Итак, у вас есть $idfromfunction где-то хранится.

С этим бизнес-идентификатором, а затем циклически просматривайте идентификаторы вашей категории

(возможно, уже использовал):

SELECT category_id, category_name
FROM categories

(... и показывал этот список вашему пользователю через флажки или выпадающий список или что-либо еще)

После того, как пользователь выберет один $categoryidfromform, вы можете вставить его в таблицу tbl_works_categories

INSERT INTO tbl_works_categories
    (bus_id, category_id)
VALUES
    ( $idfromfunction, $categoryidfromform) ;
...