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

时间:2011-02-19 18:59:24

标签: php mysql

$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 :(得分:0)

您应该在order_id上设置AUTO_INCREMENT。然后,只要您没有明确指定一个值,MySQL就会自动将下一个值分配给order_id

如果还没有,您还应将order_id设置为唯一。

答案 1 :(得分: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;