【问题标题】:random select from table [duplicate]从表中随机选择[重复]
【发布时间】:2010-12-03 13:23:49
【问题描述】:

可能重复:
How to request a random row in SQL?

           I have table:
           name,age,school
           jane,15,zu
           peter,16,zu
           john,15,stu
           Tomas,15,kul
           viera,17,stu
           tibor15,zu

我想从这个表中选择每所学校 1 人(随机)

【问题讨论】:

标签: php mysql random


【解决方案1】:
select * from table  group by school order by rand() 

【讨论】:

  • 不工作,每个学校的记录仍然相同
  • 我删除了限制请再次检查
  • 仍然不适合我。运行此查询后:记录顺序不同,但人仍然相同:
  • 例如:1)peter,16,zu;john,15,stu;Tomas,15,kul 2)john,15,stu;peter,16,zu;Tomas,15,kul
  • 我想要这个:1)peter,16,zu;john,15,stu;Tomas,15,kul 2)jane,16,zu;viera,15,stu;tomas,15,kul
【解决方案2】:

这是非常低效的,因为它随机地对整个表进行排序,然后对一个可能很大的未索引临时表进行分组,但这是可行的。

SELECT * 
FROM (
     SELECT * 
     FROM  my_table 
     ORDER BY RAND()
     )a
GROUP BY school

将其分解可能更明智。

  1. 一个查询来检索列表 学校。
  2. 对于每所学校,一个查询可获取该学校的随机学生。

请参阅this post,了解有关如何有效获取单个随机值的一些巧妙技巧。

【讨论】:

  • 完美运行。这正是我想要的。谢谢里德西奥
【解决方案3】:

如果您使用的是 php(如标签所示),请运行 SELECT * FROM table;,然后根据查询中的结果数生成一个随机数。例如:

i = floor(random()*query.length);

然后寻找seek(i)和viola指示的记录,你有一个随机条目=)

您必须使用自己的知识/文档来获得确切的语法,我有一段时间没有接触 PHP,但逻辑是合理的。

加里

【讨论】:

  • 当数据库中的行多于几行时不是很有用...
  • 正如@A 所说,这是一个糟糕的主意。在大型表上,这将非常慢,并且会在数据库上产生不必要的负载。
猜你喜欢
  • 2012-02-05
  • 1970-01-01
  • 1970-01-01
  • 2016-06-08
  • 2015-07-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多