如何从一个表中选择5个随机行并列出一秒中的行?

时间:2013-04-24 21:15:45

标签: mysql

确定, 我有2张桌子。在名为项目的地方,其中存储了所有数据(ID,名称,描述等)和第二个名为精选的表格,其中存储了精选项目列表(id ,itemid)

我想要做的是从特色表中选择5个随机行,并列出与items表中的itemid匹配的列表。 items表有点大,300,000行左右,并且feature目前有106.

次要问题:如果我只是在item表中添加一个列来设置bool(如果它的特色与否)会更好吗?

3 个答案:

答案 0 :(得分:4)

SELECT  *
FROM    featured f
JOIN    items i
ON      i.id = f.itemid
ORDER BY
        RAND()
LIMIT   5

虽然这个查询在大型数据集上可能需要很长时间。

答案 1 :(得分:3)

我个人认为最好使用另一个列而不是另一个表,因为两个表都有相同的超级键。听起来好像JOIN对你来说会很好。

SELECT * FROM featured f JOIN items ON (f.id = itemid) ORDER BY RAND() LIMIT 5;

答案 2 :(得分:2)

我认为最有效的方法是:

select *
from (select f.*
      from featured f
      order by rand()
      limit 5
     ) f join 
     items i
     on i.id = f.itemId;

在您的情况下,106行与5行的排序在性能方面可能并不重要。但如果特色列表增长,那么它可能会产生影响。