0

table1に入力されるデータの一意性を条件として、2つのテーブル(table1とtable2)にデータを挿入しようとしています。Table1には、ポップ&メール&ネイバーフッドに設定された一意のキーがあります。同じ人が近所で同じポップを提出した場合、どちらのテーブルでも何も起こらないという考え方です。他の誰かが同じポップと近隣を入力すると、それはテーブル1にデータを入力し、テーブル2の投票を1増やします。「重複キー無視」について話している人がいると聞きました。コマンドが本物であるかどうかは実際にはわかりません。

 mysql_query("INSERT INTO `table1` VALUES ('$pop','$first', '$last', '$email',
'$neighborhood') on duplicate key ignore (INSERT INTO `table2` 
VALUES ('$pop', '$neighborhood','$votes', '$city') ON DUPLICATE KEY UPDATE 
`votes` = `votes` +1)"); 

次のコードは機能していますが、table1の一意のデータに関係なく、table2にデータが入力されることを理解しています。

 mysql_query("INSERT INTO `table1` VALUtS ('$pop','$first', '$last', '$email', '$neighborhood')"); 
 mysql_query("INSERT INTO `table2` VALUES ('$pop', '$neighborhood', '$votes', '$city') ON DUPLICATE KEY UPDATE `votes` = `votes` +1");

ご不明な点がございましたらお知らせください。

4

1 に答える 1

0

単一のテーブルを持たないのはなぜですか?一意のキーを pop,neighborhood,email に変更し (つまり、pop,neighborhood は左端の 2 つであり、group by で使用できます)、'votes' 列をドロップします。次に、次のようなクエリを実行できますSELECT pop, neighborhood, count(*) AS votes FROM table1 GROUP BY pop,neighborhood;

のようなものはないと思いますが、基本的に、挿入が失敗した場合はエラーを返さないと言っているものON DUPLICATE KEY IGNOREがあります。INSERT IGNORE INTO ...別のテーブルを保持する必要がある場合は、最初のクエリを実行する必要があります。重複キー エラーが発生したかどうかを確認してから、重複キー更新時に 2 番目のテーブルに挿入します。

于 2012-08-15T04:32:14.947 に答える