2013-03-26 66 views
3

我試圖找到一些東西來幫助我,但沒有運氣。選擇不同的值,並在同一列(值)排序

我有一列值爲1-4的「slide_no」。 我想從數據庫中選擇不同的slide_no order by slide_no,但顯示隨機選擇的圖像。

數據庫表

 
slide_id | slide_name | slide_no | fk_project_id 
    1  | pic1.jpg | 1  | 2 
    2  | pic2.jpg | 3  | 4 
    3  | pic3.jpg | 2  | 3 
    4  | pic4.jpg | 4  | 1 
    5  | pic5.jpg | 2  | 6 
    6  | pic6.jpg | 3  | 5 

正如你所看到的,slide_no不必是唯一的,我希望它能夠在每個頁面加載顯示隨機圖像。到目前爲止,我只能夠生成一個查詢來獲取前4張圖片。

是否可以通過slide_no進行排序並獲取隨機圖像,其中有不同的圖像(仍按slide_no排序)?

在此先感謝。

+0

你是什麼意思的「隨機幻燈片圖像」 – 2013-03-26 15:56:38

+0

我相信op想要的圖像隨機圖像slide_no = 1,圖像隨機圖像其中slide_no = 2,圖像隨機圖像其中slide_no = 3 ,並從slide_no = 4的圖像隨機圖像。 – jswolf19 2013-03-26 16:00:34

+0

是的,從slide_no = 1等圖像的隨機圖像:) – Niantic 2013-03-27 13:45:18

回答

1

工作例如:

http://www.sqlfiddle.com/#!2/0664c/8

Select slide_name, slide_no From 
(SELECT * 
FROM (SELECT * 
    FROM tableName 
    GROUP BY slide_no, slide_name 
    ORDER BY RAND() 
) `tempTable` 
) x 
Group by slide_no 
ORDER BY slide_no ASC 
limit 4 
+0

這幾乎讓我的一天!圖片確實發生了變化,但不幸的是它仍保持着相同的圖片。 有沒有可能改變這個,所以它選擇一個隨機圖像,但'slide_n'命令? – Niantic 2013-03-27 13:58:26

+0

@Niantic是的,嘗試最新的更新。 – 2013-03-27 15:28:19

+0

它看起來像是在工作一分鐘,但它會選擇所有圖像並全部放出。即使其中只有4個顯示,您可以在源代碼中看到全部6個。我嘗試了一個限制4,但它然後再次選擇4個隨機,它可以有1,2,2,3(示例) - 失蹤slide_no = 4和有額外slide_no = 2。嘗試了一個獨特的slide_no之前,但這導致了一個錯誤。 – Niantic 2013-03-27 17:00:27

2

你可以嘗試這樣的事情,如果你只是想找每次一個隨機ID。

SELECT slide_id 
FROM {table_name} 
ORDER BY RAND() 
LIMIT 1; 
4

MySQL爲此提供ORDER BY RAND()

ORDER BY RAND()LIMIT結合對於從一組行中選擇隨機樣本很有用。

查詢將是:

SELECT * 
FROM (SELECT * 
    FROM `tblName` 
    GROUP BY slide_no 
    ORDER BY RAND() 
) `tempTable` 
ORDER BY slide_no ASC 
+1

我嘗試了ORDER BY RAND(),但它混淆了它的順序。我需要的是由slide_no(asc)排序的隨機圖片。 – Niantic 2013-03-27 13:49:19

+0

@Niantic檢查編輯。 – hjpotter92 2013-03-27 14:03:21

+0

現在我可能看起來很無知,但是'tempTable'是什麼? – Niantic 2013-03-27 14:07:42

0
SELECT slide_no 
, (SELECT TOP 1 slide_name 
    FROM #tmp T2 
    WHERE T2.slide_no = T1.slide_no  
    ORDER BY RAND() --You can place other logic to "randomize" here in the future 
    ) 
FROM #tmp T1 
GROUP BY slide_no; 

我不知道這是否給你你在找什麼。問題是重複調用具有相同種子值的RAND()將返回相同的結果。如果你想讓它成爲真正的隨機,這本身就是另一個問題。請參閱here用於在SQL中生成隨機數。

+0

很確定問題有MySQL標記。 – hjpotter92 2013-03-26 16:04:27