создать порядок для таблицы php без выполнения двух запросов к базе данных

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

Есть ли способ сделать это в одном запросе? Или, может быть, вы, ребята, знаете лучший метод?

Спасибо

Теги:

2 ответа

0
Лучший ответ

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;
0

Вы должны установить AUTO_INCREMENT на order_id. Затем MySQL автоматически назначит следующее значение order_id, пока вы явно не укажете его.

Если вы этого не сделали, вы также должны установить order_id как уникальный.

  • 0
    это не сработает
  • 0
    Я полагаю. но автоинкремент не делает это в последовательном порядке, например 1,2,3,4 ... поэтому, если пользователь удалит 1,2,3,4, он начнет считать с 5 ... но я думаю, это действительно не имеет значения, так как пока он сохраняет заказ
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню