2017-08-03 61 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

你的版本更好吗? –