У меня есть база данных, которая принимает данные, представленные пользователем, записи, из которых я хочу группировать одну или несколько из примерно 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, как на самом деле связывать их в базе данных!
Я предполагаю, что ваша форма возвращает идентификаторы категорий для каждой выбранной категории и что эти идентификаторы соответствуют категории 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 }
Надеюсь, что это помогает. Я не тестировал ни один из вышеуказанных кодов, поэтому вам может потребоваться некоторая отладка, если что-нибудь сломается. Пожалуйста, не стесняйтесь спрашивать, есть ли у вас какие-либо вопросы.