2013-04-24 64 views
0

好的, 我有2个表格。在所谓的项目,所有的数据都存储(ID,名称,描述等。)和第二台名为功能其中精选内容的列表存储(ID,商品ID)如何从一个表中选择5个随机行并从第二个行中列出行?

我会喜欢做的是从精选表中选择5个随机行,并在items表中匹配itemid。 的项目表是有点大,30行左右,而目前该功能具有106

次要的问题:它会更好,如果我只需添加到项目表中,设置一个布尔值,如果它的功能还是不?

回答

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

虽然此查询可能需要很长时间处理大型数据集。

+0

感谢您的快速响应。在这个例子中使用rand()会好吗? – user1343099 2013-04-24 21:19:54

+0

有106条记录,是 – Quassnoi 2013-04-24 21:20:22

+0

感谢您的帮助 – user1343099 2013-04-24 21:25:41

3

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

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

谢谢。我会接受你的建议并添加一个新专栏。但将保持这个以供将来参考(该死的这个网站的岩石!) – user1343099 2013-04-24 21:25:59

2

我认为最有效的方法是:

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

在你的情况下,在106与5行的排序是在性能方面可能是无关紧要的。但是,如果特色列表增长,那么它可能会有所作为。

+0

好吧,谢谢。对我来说,真的很酷,你们想出了所有这些“诀窍”以获得最快的结果。这个网站教了我很多。 – user1343099 2013-04-24 22:17:35

相关问题