1

我有一个带有引号行的表,(ID, QUOTE)并且我有一个查询来获取随机报价(ORDER BY RAND() LIMIT 0,1)。我知道它很慢,但我没有太多行。所以现在我想得到当天的报价。它应该是随机报价,但在一天内不可更改。我不想添加新列,也不想选择当天的报价。我只想要一个查询,该查询将获得一个随机报价,但报价在一天中都是相同的,第二天它将返回其他随机报价。如何执行此 SQL Palladins?

4

2 回答 2

10

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

ORDER BY RAND(20120714) LIMIT 1

我也很好奇您在这里所说的“其他”是什么意思:

第二天它将返回其他随机报价。

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

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

  • 查找今天最后一次使用的报价。
  • 如果有的话,那就是当天的报价。
  • 如果不是,则从过去 n 天内未使用的行中选择一个新的当天报价,并更新该行以显示它是今天的当天报价。

我不想添加新列

好的,稍微不同的方法怎么样:

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

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

于 2012-06-14T19:49:53.073 回答
0

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

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

如今,足够多的语言(如 Python、Perl、PHP 和其他语言)拥有良好的数据库接口。Python 也有一个随机库。

于 2012-06-15T12:30:13.813 回答