2011-12-30 3 views
0

私はそうのような記述を更新する必要がある場合は...mysqlでUPDATEを開始しますか?

$q = $dbc -> prepare("UPDATE items SET shrapnel = shrapnel-1000 WHERE id = ? LIMIT 1"); 
$q -> execute(array($user['id'])); 
$q = $dbc -> prepare("UPDATE accounts SET username = ? WHERE id = ? LIMIT 1"); 
$q -> execute(array($_POST['username'], $user['id'])); 

は2に参加することが可能ですか?私はちょうどうまくいかないさまざまな方法をたくさん試しましたか?

+1

私たちが* how *になる前に、*理由を教えてください。* –

+0

私は更新で結合構文を使用する方法を学びたいので、クエリに参加すると1クエリが2より速くなるので速度が向上すると聞いています。 – cgweb87

+0

もしあれば、それは重要ではないでしょう。複数のクエリを実行することによって得られる唯一のパフォーマンスの向上は、同じテーブルに影響するかどうかです。データベースはインデックスを一度しか作成しなければなりません。 2つのテーブルを更新している場合は、2つのクエリを実行することもできます。実際には、エンジンが最初に行を結合する必要がないので、おそらく2つのクエリを実行する方が速いでしょう。 –

答えて

2
UPDATE items, accounts SET items.shrapnel = items.shrapnel - 1000, accounts.username = ? WHERE items.id=accounts.id AND accounts.id = ? 

しかし、率直に言って、これは非常に危険です。

両方のクエリが正しく実行されるようにするには、代わりにトランザクションを使用します。

$dbc -> beginTransaction(); 
// queries go here 
$dbc -> commit(); 
+0

+1トランザクション –

+0

はい私はトランザクションを使用しており、必要に応じてロールバックするので、お返事ありがとうございます! – cgweb87

1

私がmysql UPDATE reference manualで見つけたものを見て参考にしてください!

複数のテーブルの構文は、このている:複数のテーブルの構文について

UPDATE [LOW_PRIORITY] [IGNORE] table_references 
SET col_name1={expr1|DEFAULT} [, col_name2={expr2|DEFAULT}] ... 
[WHERE where_condition] 

、UPDATE条件を満たしtable_referencesで指定各テーブル内の行を更新します。

ただし、この場合、ORDER BYとLIMITは使用できません。

関連する問題