2012-01-04 1 views
0

私は買い物袋のためのMySQLのDBに流れるテーブルを持っている:のMySQL(PHP)、更新または1つのクエリでのショッピングバッグの内容を置き換え、

BAGS 
----- 
| bagID   | date_added |   
| primary Key |   | 
------------------------------ 
| 1    | 2012-01-04 | 

BAGS_CONTENT 
----- 
| ID     | productID | qyt | 
| foreign key->bagID |   |  | 
----------------------------------------- 
| 1     | 103 | 4 | 

// $sql Could contain this: 

$sql = "(1,103,5), 
     (1,101,3)"; 

INSERT INTO BAGS_CONTENT 
(ID, product_id, qty) 
VALUES 
".$sql." 

私はBAGS_CONTENTが既存を更新したいですレコード(存在する場合はIDproduct_id)、存在しない場合は新しい行を追加します(IDproduct_id)。

REPLACE INTOON DUPLICATE KEY UPDATEを試してみましたが、うまく動作しません。

キーと関係がありますか?
このような状況でデータベースをどのようにクエリする必要がありますか?

答えて

1

ON UPDATE KEY UPDATEは、一意の値がすでにテーブルに存在する場合にUPDATEステートメントをトリガーします。固有のフィールドに設定されていることを確認してください。私は(両方とも1でユニークな組み合わせ)あなたはIDproductIDUNIQUEを置くために持っていると思う:
ALTER TABLE BAGS_CONTENT ADD UNIQUE (ID, product_id)

あなたのクエリは次のようになります。ここに重複した上での詳細をだ INSERT INTO BAGS_CONTENT (ID, product_id, qty) ".$sql." ON DUPLICATE KEY UPDATE qty = VALUES(qty);


キー ': http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

+0

ほとんどの場合、同じ回答(Ray and Eugen Rieck)をいただきありがとうございます。問題を解決しました。 (まだ勉強してる)。 – Rob

1

BAGS_CONTENT(ID、のproductID)に一意のキーを作成するための最初の必要性ON DUPLICATE KEY UPDATEあなたを使用するには

次にあなたがREPLACEの特殊な動作をトリガするためにキーエラーを作成する必要があり

INSERT INTO BAGS_CONTENT (ID,productID,qyt) VALUES(1,101,3) ON DUPLICATE KEY UPDATE qyt=VALUES(qyt); 
0

を使用しています。提案された動作を取得するには、インデックスを追加してください:

mysql> create table bag_content (id INT,productID INT,qty SMALLINT); 
mysql> create unique index baggy on bag_content (id,productID); 
mysql> replace bag_content values(1,111,5); 
mysql> replace bag_content values(1,112,5); 
mysql> replace bag_content values(1,111,500); 
mysql> select * from bag_content; 
+------+-----------+------+ 
| id | productID | qty | 
+------+-----------+------+ 
| 1 |  111 | 500 | 
| 1 |  112 | 5 | 
+------+-----------+------+ 

注意:mysqlのみでサポートされているSQLを使用しています。軽蔑は、「彼らのSQL」です...標準プロセスを通らないmysqlのすべての革新のためです。置換機能は素晴らしいですが、コードを他のデータベースに移動することの障壁が増えます。

関連する問題