好的, 我有2个表格。在所谓的项目,所有的数据都存储(ID,名称,描述等。)和第二台名为功能其中精选内容的列表存储(ID,商品ID)如何从一个表中选择5个随机行并从第二个行中列出行?
我会喜欢做的是从精选表中选择5个随机行,并在items表中匹配itemid。 的项目表是有点大,30行左右,而目前该功能具有106
次要的问题:它会更好,如果我只需添加到项目表中,设置一个布尔值,如果它的功能还是不?
好的, 我有2个表格。在所谓的项目,所有的数据都存储(ID,名称,描述等。)和第二台名为功能其中精选内容的列表存储(ID,商品ID)如何从一个表中选择5个随机行并从第二个行中列出行?
我会喜欢做的是从精选表中选择5个随机行,并在items表中匹配itemid。 的项目表是有点大,30行左右,而目前该功能具有106
次要的问题:它会更好,如果我只需添加到项目表中,设置一个布尔值,如果它的功能还是不?
SELECT *
FROM featured f
JOIN items i
ON i.id = f.itemid
ORDER BY
RAND()
LIMIT 5
虽然此查询可能需要很长时间处理大型数据集。
我个人认为使用另一个列而不是另一个表会更好,因为两个表都有相同的超级键。这听起来像一个JOIN会为你工作得很好。
SELECT * FROM featured f JOIN items ON (f.id = itemid) ORDER BY RAND() LIMIT 5;
谢谢。我会接受你的建议并添加一个新专栏。但将保持这个以供将来参考(该死的这个网站的岩石!) – user1343099 2013-04-24 21:25:59
我认为最有效的方法是:
select *
from (select f.*
from featured f
order by rand()
limit 5
) f join
items i
on i.id = f.itemId;
在你的情况下,在106与5行的排序是在性能方面可能是无关紧要的。但是,如果特色列表增长,那么它可能会有所作为。
好吧,谢谢。对我来说,真的很酷,你们想出了所有这些“诀窍”以获得最快的结果。这个网站教了我很多。 – user1343099 2013-04-24 22:17:35
感谢您的快速响应。在这个例子中使用rand()会好吗? – user1343099 2013-04-24 21:19:54
有106条记录,是 – Quassnoi 2013-04-24 21:20:22
感谢您的帮助 – user1343099 2013-04-24 21:25:41