为php表创建排序,无需对数据库进行两次查询

为php表创建排序,无需对数据库进行两次查询,php,mysql,Php,Mysql,到目前为止,我正在进行一次初始查询,以获取表中的行总数,这样我就可以向新插入的行添加正确的order\u id 基本上,我想保留1,2,3,4,这样用户就可以自己编辑订单了 有没有一种方法可以在一个查询中实现这一点?或者你们知道更好的方法 谢谢您应该设置您的订单id。然后MySQL会自动将下一个值分配给order\u id,只要您没有明确指定一个值 如果没有,您还应该将订单id设置为唯一。A.在类别id、订单id上使用复合主键,并在此基础上构建自动增量,如 $q4 = "SELECT order

到目前为止,我正在进行一次初始查询,以获取表中的行总数,这样我就可以向新插入的行添加正确的order\u id

基本上,我想保留1,2,3,4,这样用户就可以自己编辑订单了

有没有一种方法可以在一个查询中实现这一点?或者你们知道更好的方法

谢谢

您应该设置您的
订单id
。然后MySQL会自动将下一个值分配给
order\u id
,只要您没有明确指定一个值


如果没有,您还应该将订单id设置为唯一。

A.
类别id、订单id
上使用复合主键,并在此基础上构建自动增量,如

$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);
B:在插入过程中使用子查询,如

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

我想是吧。但是自动增量并不是像1,2,3,4这样的连续顺序。。。因此,如果用户删除1,2,3,4,它将从5开始计数。。。但是我想,只要它保留了订单,它就真的不重要了。它不重用有一个很好的理由。假设您在其他表中有数据链接到订单_id=1,如果您删除了该订单,然后创建了另一个具有相同id的订单,则其他数据将错误地链接到新订单。ID应该是唯一的,并且永远不会重用,不重用已删除的ID没有任何缺点。
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;