2015-06-20 20 views
-2

我有2個表,我需要的值爲uid = 0在MySQL中使用rand()更新表中的值到另一個使用rand中的rand()

這裏我表:

表1:遊戲

id  | uid  | 
--------+---------+ 
1  | 5  | 
2  | 7  | 
3  | 0  | 

表2:用戶

idu  | name | 
--------+---------+ 
1  | todd | 
2  | mario | 
3  | luigi | 

所以基本上我需要UPDATE的第3排的uidtable1與之間的隨機數1-3(idu的值爲table2)。

對於我試圖這樣做的目的:

UPDATE games (uid) 
SET idu = ORDER BY rand() LIMIT 1 FROM users 
WHERE uid = 0; 

爲什麼它不工作?

+1

實際上,這可能有所幫助:http://stackoverflow.com/a/6550197/2737474 –

+0

不清楚更新完成後預期的結果是什麼? –

+0

@AbhikChakraborty我寫道:「我需要更新表1-3的第三行的uid值,其值在1-3之間(表2的idu值)。」 – NineCattoRules

回答

1

爲什麼你不能做到像

UPDATE games SET uid = (
select idu from users ORDER BY rand() LIMIT 1) 
WHERE uid = 0; 

根據您的評論,在這種情況下使用複合條件。所以你的情況使用ID柱,以及在條件類似

WHERE uid = 0 AND ID = 3; 

這將確保只有ID = 3行得到更新考慮的事實,你ID列是主鍵/唯一鍵列。

+0

是的,這真的很好......但是可以將它用於「UPDATE」,只有第一行含有「uid = 0」而不是所有含有「 UID = 0'? – NineCattoRules

+0

無論哪行匹配條件'uid = 0'都會被更新。 – Rahul

+0

我希望爲每個'uid = 0'獲得一個不同的隨機數。任何可能的解 – NineCattoRules

1

我想這可能會幫助你

SELECT @idu := idu FROM users ORDER BY RAND() LIMIT 1; 
UPDATE games SET uid = @idu WHERE uid = 0; 

然而,這將更新所有行games.uid = 0相同的隨機取users.idu

+0

該死的:) ...是否有任何可能的解決方案來避免它?我需要爲具有0值的每個單元設置不同的隨機值 – NineCattoRules