Прикрепление категорий из одной таблицы к записи в другой MySQL

У меня есть база данных, которая принимает данные, представленные пользователем, записи, из которых я хочу группировать одну или несколько из примерно 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, как на самом деле связывать их в базе данных!

Solutions Collecting From Web of "Прикрепление категорий из одной таблицы к записи в другой MySQL"

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

Сначала вы вставляете свою бизнес-запись в свою бизнес-таблицу, это даст вам номер автоматического увеличения (функция 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) ; 

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

 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 = ? 

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

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

СПОСОБ 1 :

а. Запустите запрос – INSERT INTO …

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

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

д.

 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 } 

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