2017-08-03 67 views
0

嗯,我有兩個表格,類別和項目,我想獲得10個隨機類別中的每一個的隨機記錄。獲取每個類別的隨機項目

tb_category

category_id PK 
category_name 

tb_items

item_id PK 
category_id FK 

我的表tb_category大約有40行,tb_items大約有5K行,我是搜索性能。

SELECT * FROM 
(SELECT c.category_id as cid, c.category_name, i.item_id FROM 
tb_category c INNER JOIN 
tb_items i ON c.category_id = i.category_id ORDER BY RAND()) AS ShuffeledItems 
GROUP BY ShuffeledItems.cid limit 10 

我不知道這是否是更好的方法來做到這一點。

謝謝。

回答

0

我會傾向於使用相關子查詢:

select c.*, 
     (select i.item_id 
     from items i 
     where i.category_id = c.category_id 
     order by rand() 
     limit 1 
     ) as item_id 
from tb_category c 
order by c.id 
limit 10; 
+0

ü想想這是什麼:選擇b.category_name,a.item_id從tb_items一個內部聯接tb_category B關於b.category_id = a.category_id group by a.category_id order by rand()limit 10,但我tnink你的解決方案是更好的因爲這個查詢可能會慢是不是? –

+0

@JessicaBelao。 。 。您的版本沒有正確使用'group by'。它使用了MySQL中可用的(錯誤)功能,它不同於ANSI標準,並且在大多數數據庫中不起作用。 –

+0

你的版本更好嗎? –