2014-03-27 33 views
0

我想結合3選擇語句,將選擇不同食物類別的不同食物名稱的結果。但是我的表格中有很多「foodItems」的例子。我需要爲每個選擇語句只選擇一個項目,並且我希望它隨機完成。我不太清楚如何實現,我試圖在每個select語句的末尾插入ORDER BY RAND() LIMIT 1,但MySQL不喜歡它。有人可以幫如何在MySQL中使用蘭德函數與聯合使用

SELECT foodName 
FROM food 
WHERE foodCategory_id = 1 OR 2 
UNION 
SELECT foodName 
FROM food 
WHERE foodCategory_id = 7 OR 8 OR 9 
UNION 
SELECT foodName 
FROM food 
WHERE foodCategory_id = 10 OR 11 

回答

0

您可以創建一個外部SQL在FROM子句是某種臨時表是這樣的:

SELECT food_name from (
    SELECT foodName 
    FROM food 
    WHERE foodCategory_id = 1 OR 2 
    ORDER BY RAND() limit 1) a 
UNION 
SELECT food_name from (
    SELECT foodName 
    FROM food 
    WHERE foodCategory_id = 7 OR 8 OR 9 
    ORDER BY RAND() limit 1) b 
UNION 
SELECT food_name from (
    SELECT foodName 
    FROM food 
    WHERE foodCategory_id = 10 OR 11 
    ORDER BY RAND() limit 1) c  
+0

我剛剛嘗試過,此解決方案僅返回1個項目。我需要爲每個select語句返回1個食物名稱。 – user3058242

+0

我剛剛編輯了我的結果。新的查詢應該這樣做。 – eduardosasso

+0

工作,謝謝:) – user3058242

0
SELECT foodname FROM food WHERE .. ORDER BY RAND() LIMIT 0,1; 

只需添加你想,無論WHERE條件。

+0

當我嘗試,它給我一個錯誤「#1221 - UNION的錯誤用法和ORDER BY」 – user3058242

+0

然後你有UNION在錯誤的地方。它在第二個和第三個SELECT之前進行。 –