我必须从列中随机选择4行。
最好是从数据库中随机生成4个id和执行4个请求的select列,其中id = ...'
或者选择一个请求中的所有行并选择之后?
答案 0 :(得分:0)
如果你能够生成随机的现有id,我认为最好的方法是使用类似where id in (id1, id2, id3, id4)
的子句。这将导致在一个查询中获得4条记录,因此不会获取不必要的查询或记录。
答案 1 :(得分:0)
如前所述,where id in (id1, id2, id3, id4)
是从MySQL角度来看最快的方法。但是,在生成这些ID的应用程序中需要一些逻辑:所有4个ID都应该存在,随机分布,并且您希望避免重复。在最坏的情况下,您将使用大量查询检索所有existend ID的列表,提取4个随机值,然后再次查询。
要完成所有这些逻辑,将选择移到MySQL中是明智的:
SELECT * FROM foobar
ORDER BY RAND()
LIMIT 4;
你必须明白mysql中的 速度很慢,但你在应用程序逻辑中有一个速度提升,并且可以确保在你的桌子上获得随机值。
编辑: 该评论询问PHP是否紧跟此任务,然后是MySQL。答案是否定的。 它不是通过“使用rand”来完成的。您需要在PHP中包含一个包含所有这些ID的数组。这是一个巨大的查询,大量的TCP流量,巨大的数组将在PHP中构建,巨大的btree将由zend引擎构建。然后,使用ID,您必须触发第二个查询以获取这些ID的行。
答案 2 :(得分:0)
虽然RAND()
功能可能很慢,但到目前为止我还没有遇到速度方面的重大问题。我的策略实际上是将数据库加回到自身的查询中,返回带有限制的随机ID列表。
SELECT *
FROM table AS t1
JOIN (
SELECT rowID
FROM table
ORDER BY RAND()
LIMIT 4
) AS t2
WHERE t1.rowID = t2.rowID
还有一个更强大的解决方案 - 尝试查看this question(2010年询问)。