2010-10-18 82 views
6

我想顯示兩條記錄。mysql查詢選擇一個特定行和另一個隨機行

對於例如 select * FROM users WHERE user_id = 5

現在我想另一行隨機用戶表,但與USER_ID選擇!= 5

是否有可能在一個單一的查詢做。我嘗試使用聯合所有,但我沒有得到兩個不同的行。

感謝

回答

7

這對我工作得很好。第一個結果始終是ID 5的記錄,第二行是隨機的。請注意,如果不存在ID爲5的記錄,則兩行都是隨機的。

SELECT * FROM users ORDER BY (user_id = 5) DESC, RAND() LIMIT 0,2 
+0

這是正確的,一個沒有UNION +1 – Joony 2010-10-18 10:58:35

+0

謝謝佩卡。我試過你的查詢。它效果很好。 +1。如果我有條件怎麼辦?我可以在那裏使用它。例如SELECT * FROM users ORDER BY(now()BETWEEN start_date and end_date)DESC,RAND()LIMIT 0,2 ?? – noobcode 2010-10-18 11:10:57

+0

@noobcode肯定,取決於你想要做什麼。隨機行不會被這種情況覆蓋 – 2010-10-18 11:12:45

0

試試這個

SELECT * FROM users WHERE user_id = 5 || user_id != 5 ORDER BY RAND() LIMIT 2 
+0

將不起作用:不一定給用戶ID 5作爲第一個結果 – 2010-10-18 10:50:04

+0

啊,是你的權利:) – 2010-10-18 10:52:36

0

聯盟應該做的伎倆。你可能忘了LIMIT

(SELECT * FROM users WHERE user_id = 5 LIMIT 1) 
UNION 
(SELECT * FROM users WHERE user_id != 5 LIMIT 1) 
0

試試這個:

SELECT * FROM users WHERE user_id=5 
union all (
    SELECT * FROM users WHERE user_id!=5 
    ORDER BY RAND() LIMIT 0,1) 
相關問題