2011-12-30 106 views
0

如果我有更新,像這樣的語句...在mysql中加入更新?

$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'])); 

是否有可能加入這兩個?我嘗試了很多不同的方法,但都不起作用。

+1

在我們開始* how *之前,告訴我們爲什麼* – 2011-12-30 21:10:41

+0

因爲我想學習如何在更新中使用連接語法,並且我還聽說加入查詢會提高速度,因爲1查詢快於2 – cgweb87 2011-12-30 21:19:35

+0

如果有的話,那將是微不足道的。執行多個查詢所獲得的唯一性能提高是如果它們影響同一個表 - 數據庫只需重新創建索引一次。如果你正在更新兩個表,你可以執行兩個查詢。事實上,執行兩個查詢可能會更快,因爲引擎不必首先將行連接在一起。 – 2011-12-30 21:22:04

回答

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交易 – 2011-12-30 21:14:06

+0

葉我正在使用交易和回滾,如果我需要,謝謝你的答案! – cgweb87 2011-12-30 21:20:23

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。