2011-10-17 73 views
1

基本上我想在一個單一的查詢中執行以下操作。可能嗎?選擇隨機行並在同一查詢中更新它們?

$q = mysql_query('select * from table ORDER BY rand() LIMIT 5'); 
$s; 
while($r = mysq_fetch_array($q)){ 
    $s[i] = $r['id']; 
    // Do stuff 
} 
$u = mysql_query("update table SET lastUpdated = NOW() where id in (".implode(',',$s).")"); 

回答

3

不能在同一查詢中對同一個表使用select/update語句。

5

你可以只添加

ORDER BY RAND() LIMIT 5 

要將更新查詢結束

編輯:

我錯過了問題的一部分,在第一。如果你只是需要更新5個隨機行,上述將工作。但是,看起來您需要從表中獲取5個隨機ID,對這些ID執行一些操作,然後更新這些行。不幸的是,UPDATE查詢可以修改數據,而SELECT查詢可以檢索數據,但是兩個查詢都不能同時執行這兩個操作。你也許可以建立某種形式的存儲過程的更新/選擇5個隨機行,但是這將是更爲複雜比2個查詢您目前擁有

編輯#2:

如果你的理由想這樣做在同一個查詢中是併發的,你可以查看MySQL的Locking Read功能。

+0

然後它會更新其他不同的隨機行!膿它仍然會2查詢 –

+0

對不起,我沒有注意到你需要捕獲的ID作爲查詢的輸出。所以你的問題的答案是「不,你不能那樣做」 –

+0

然而,quw – somewhatoff

相關問題