2011-02-19 8 views
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); 

現在、テーブルの行の総量を取得するために1つの初期クエリを実行していますので、新しく挿入された行に正しいorder_idを追加できます。データベースへの2つのクエリを実行せずにPHPテーブルの順序を作成する

は基本的に、私は、ユーザーが注文自身

1つのクエリでこれを行う方法はあります編集できるIよう1,2,3,4を維持したいですか?あるいは、あなた方はもっと良い方法を知っているでしょうか?

おかげ

答えて

0

category_id, order_idに複合主キーを使用してA.、及び

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

あなたorder_idAUTO_INCREMENTを設定する必要があります。次に明示的に指定しない限り、MySQLは自動的にorder_idに次の値を割り当てます。

まだ設定していない場合は、order_idも一意に設定する必要があります。

+0

ように、インサート中のサブクエリを使用これは動作しません – ajreal

+0

私は推測します。しかし、自動インクリメントdoesntは1,2,3,4のような連続した順序でそれを行います...もしユーザーが1,2,3,4を削除すると5から数え始めます...しかし、私はそれが本当に問題ではないと思います長い間注文を保持しています – Adam

+0

再利用しない理由があります。 'order_id = 1'にリンクされた他のテーブルにデータがあったとします。もしあなたが注文を削除し、同じIDを持つ別のテーブルが作成された場合、その他のデータは新しい注文と正しくリンクされません。 IDは一意であり、再使用されることはありません。削除されたIDを再利用しないことには不利益はありません。 –

関連する問題