2013-05-22 1 views
1

Я пытаюсь создать базовый eshop как назначение для онлайн-заказов (не для использования, просто чтобы мы научились использовать PhP и MySQL). Мой первый проект имел очень простые таблицы, которые имели все основные функциональные возможности. Однако профайлер попросил, чтобы мы создали продукты, чтобы один элемент мог принадлежать более чем к одной категории (изначально у меня была таблица категорий как простая таблица поиска). Я изменил мою DB схему следующим образом:Вставка элемента с несколькими категориями в MySQL DB

DB схемы для продуктов

При изменении остальных команд и запросов PHP и MySQL не было очень тяжело, я пришел в тупик, когда я необходимо добавить новый продукт и/или добавить к нему категории. Я использовал идентификатор категории из категорий <select> в php и вставлял его как переменную в mysql, но я не могу сделать это в этой базе данных, так как у меня нет идентификатора новых элементов (auto increment) до того, как он фактически вставлен в таблица продуктов.

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

+0

Почему это так срочно вставить * немедленно *? –

+0

Сразу же может быть плохой выбор слова, но таблица prod_cat должна быть обновлена ​​к моменту, когда пользователь получит сообщение «Новый продукт добавлен успешно». – Spyros

ответ

1

mysqli_insert_id Функция PHP (documentation) вернет автоматически увеличивающийся идентификатор вставленного объекта. Код выглядит примерно так:

$mysqli = new mysqli("localhost", "user", "password", "database"); 
$mysqli->query("INSERT INTO products (stuff) VALUES (stuff)"); 
$product_id = $mysqli->insert_id; 

Кроме того, вы не будете использовать mysql библиотеку, которая устаревшее (при условии, что вы используете его прямо сейчас).

+0

Спасибо за подсказку, посмотрите на нее как можно скорее. – Spyros

+0

@AlfonsoJamesHannibal - Обновлен с примером кода. –

+0

Использование mysqli с самого начала. Хорошо, это работает чудеса на тестовой странице SQL. Теперь вы можете изменить фактическую страницу SQL. Спасибо! – Spyros

0

Наоборот, вы выбираете либо элегантный, либо простой, за исключением того, что только вставили идентификатор товара, который должен быть получен с использованием выделенного API-вызова, предназначенного для этого. Каждый mysql API в PHP имеет соответствующий метод, mysqli_insert_id() например

+0

Спасибо за команду, я проверю ее. – Spyros

0

Вы можете использовать запрос для поиска следующего автоматического значения приращения таблицы

SELECT AUTO_INCREMENT AS nextAutoId 
FROM information_schema.TABLES 
WHERE TABLE_SCHEMA = '[database_name]' 
    AND TABLE_NAME = '[table_name]' 

Например:

test_database.test_table: 
+------------+--------------+ 
| product_id | product_name | 
+------------+--------------+ 
| 1   | Pies   | 
| 2   | Chips  | 
+------------+--------------+ 

SELECT AUTO_INCREMENT AS nextAutoId 
FROM information_schema.TABLES 
WHERE TABLE_SCHEMA = 'test_database' 
    AND TABLE_NAME = 'test_table' 

// Outputs: 3 
Смежные вопросы