$q4 = "SELECT order_id FROM menu WHERE category_id = $cat_id";
$r4 = mysqli_query($dbc, $q4);
$num_items = mysqli_num_rows($r4)+1;
$q5 = "INSERT INTO menu (category_id, order_id, item, price, date_added, name) VALUES ('$cat_id', '$num_items', '$item', $price, NOW(), $name)";
$r5 = mysqli_query($dbc, $q5);
Как сейчас, я делаю один начальный запрос, чтобы получить общее количество строк в таблице, поэтому я могу добавить правильный order_id во вновь вставленную строку.
В принципе, я хочу сохранить 1,2,3,4, чтобы пользователь мог самостоятельно отредактировать заказ
Есть ли способ сделать это в одном запросе? Или, может быть, вы, ребята, знаете лучший метод?
Спасибо
A., используя составной первичный ключ на category_id, order_id
, и создайте для него автоматическое увеличение, например
create table menu
(
category_id int(10) unsigned default 0,
order_id int(10) unsigned auto_increment,
item int(10) unsigned default 0,
price double(10, 2) unsigned default 0,
date_added datetime,
name varchar(255),
primary key(category_id, order_id)
);
B: используйте подзапрос во время вставки, например
insert into menu
(category_id, item, price, date_added, name, order_id)
select
$category_id as category_id,
$item as item,
$price as price,
now() as date_added,
$name as name,
(select max(order_id) from menu where category_id=$category_id)+1 as order_id
from dual;
Вы должны установить AUTO_INCREMENT
на order_id
. Затем MySQL автоматически назначит следующее значение order_id
, пока вы явно не укажете его.
Если вы этого не сделали, вы также должны установить order_id
как уникальный.