如何获得当天的随机行?

时间:2012-06-14 19:47:29

标签: mysql sql

我有一个包含引号行(ID, QUOTE)的表格,我有一个查询来获取随机引用(ORDER BY RAND() LIMIT 0,1)。我知道它很慢,但我没有太多行。所以现在我想得到当天的报价。它应该是随机引用,但在一天内不可更改。我不想添加新列,我不想选择当天的报价。我只是想要一个随机引用的查询,但是报价在一整天都是相同的,第二天它会返回其他随机引用。怎么做这个SQL Palladins?

2 个答案:

答案 0 :(得分:9)

根据当前日期为随机数生成器使用种子:

ORDER BY RAND(20120714) LIMIT 1

我也很好奇你对“其他”的意思:

  

第二天它将返回其他随机引用。

如果您想每天选择不同的随机引用,那么您不应该使用简单的ORDER BY RAND(seed)。这可能会连续三天返回相同的报价。

如果您想避免这种情况发生,您可以改为存储每天选择的报价,并从过去n天未使用的报价中选择随机报价。当然,如果您在最后一次使用报价时进行存储,那么原始问题也有一个自然的解决方案:

  • 查找今天上次使用的报价。
  • 如果有,那就是当天的引用。
  • 如果没有,则从过去n天未使用的行中选择当天的新报价,并更新该行以显示它是今天当天的报价。

  

我不想添加新列

好的,方法略有不同:

ORDER BY RAND(201207) LIMIT 14, 1
--            yyyymm        dd

现在您不需要额外的列,也不会重复,除非月份发生变化。此解决方案假定您至少有32个引号可供选择。

答案 1 :(得分:0)

解决此问题可能涉及编写一个应用程序,该应用程序每天最多选择一次ID和最小值;计算该范围内的随机数;然后将该数字写入文件。

负责打印报价的应用程序将根据ID选择报价 存储在文件中。

如今,像Python,Perl,PHP等其他语言都有很好的数据库接口。 Python也有一个随机库。