我有一个包含引号行(ID, QUOTE)
的表格,我有一个查询来获取随机引用(ORDER BY RAND() LIMIT 0,1)
。我知道它很慢,但我没有太多行。所以现在我想得到当天的报价。它应该是随机引用,但在一天内不可更改。我不想添加新列,我不想选择当天的报价。我只是想要一个随机引用的查询,但是报价在一整天都是相同的,第二天它会返回其他随机引用。怎么做这个SQL Palladins?
答案 0 :(得分:9)
根据当前日期为随机数生成器使用种子:
ORDER BY RAND(20120714) LIMIT 1
我也很好奇你对“其他”的意思:
第二天它将返回其他随机引用。
如果您想每天选择不同的随机引用,那么您不应该使用简单的ORDER BY RAND(seed)
。这可能会连续三天返回相同的报价。
如果您想避免这种情况发生,您可以改为存储每天选择的报价,并从过去n天未使用的报价中选择随机报价。当然,如果您在最后一次使用报价时进行存储,那么原始问题也有一个自然的解决方案:
我不想添加新列
好的,方法略有不同:
ORDER BY RAND(201207) LIMIT 14, 1
-- yyyymm dd
现在您不需要额外的列,也不会重复,除非月份发生变化。此解决方案假定您至少有32个引号可供选择。
答案 1 :(得分:0)
解决此问题可能涉及编写一个应用程序,该应用程序每天最多选择一次ID和最小值;计算该范围内的随机数;然后将该数字写入文件。
负责打印报价的应用程序将根据ID选择报价 存储在文件中。
如今,像Python,Perl,PHP等其他语言都有很好的数据库接口。 Python也有一个随机库。