2017-04-24 100 views
0

說我有以下數據表中的5個隨機問題:MySQL的選擇在每個類別

date_added category 
15/10/2009 Novels 
12/10/2009 Novels 
12/10/2009 Novels 
11/10/2009 Novels 
17/10/2009 Films 
16/10/2009 Films 
15/10/2009 Films 
15/10/2009 Films 
etc. 

我想要一個SQL(MySQL的)查詢每個類別只返回第一個(說)2行,即

15/10/2009 Novels 
12/10/2009 Novels 
17/10/2009 Films 
16/10/2009 Films 
+1

添加樣本表數據和可能的預期結果 - 以及格式化文本。同時向我們展示您當前的查詢嘗試。 – jarlh

+0

@Hadi Nur,將您的圖像樣本發佈到同一頁面。 – Mansoor

+0

@Mansoor,新用戶不允許包含圖片。 – jarlh

回答

0

這在MySQL中很棘手。我會推薦使用變量:

select q.* 
from (select q.*, 
      (@rn := if(@c = category_id, @rn + 1, 
         if(@c := category_id, 1, 1) 
         ) 
      ) as rn 
     from questions q cross join 
      (select @rn := 0, @c := -1) params 
     order by category_id rand() 
    ) q 
where rn <= 5; 

子查詢隨機枚舉每個類別的問題。外部查詢然後選擇每個類別的前五個。

+0

謝謝你的回答,但代碼沒有工作,我只是更新了問題 –

0

(我不是在mysql的非常好。我已經給了它一個去。)

UUID()函數將產生通用唯一標識各一次。

ORDER BY RandomID將做隨機選擇的伎倆,因爲每次運行查詢時,RandomID都將是uqique。因此,通過RandomID ASC或DESC的順序可以完全隨機地對記錄進行排序。

LIMIT只會顯示5條記錄。

最終代碼:

SELECT q.question_id, q.Question, c.category_id, uuid() AS RandomID 
FROM Question q 
INNER JOIN Category c 
    ON q.Category_id=c.Category_id 
ORDER BY RandomID ASC 
LIMIT 5 
; 
+0

感謝answe,但代碼沒有工作,我只是更新了問題 –