我有一个包含引号的数据库。我喜欢显示随机报价。但是有两个条件。


不应选择上周显示的报价。
过去显示报价的距离越远,选择报价的机会就越大。


首先不是那么困难。我可以为此使用WHERE子句。

第二个我不知道如何实现。有没有简单的方法可以执行此操作,还是需要为此定义一个复杂的函数?

一种扩展可能也很好。最初,大多数报价都不会显示。如果有可能提供一个尚未显示的报价,但显示的机会更大,那将是非常不错的。

最佳答案

一种可能的方法:按过去使用报价的时间长度排序,乘以随机数。这具有使过去更重的记录具有更大的权重的效果。

这是伪代码:

select quote from quotes
    where current date - display date > 1 week
    order by ((current date - display date - 1 week) * random number) desc
    fetch first row only


您将不得不使其适应系统的日期/时间功能,因为这些功能高度可变。

您可能需要使用一个中间步骤将随机数应用于每一行,因为在许多系统上,直接按rand()排序并不起作用。

更新:这是a working MySQL example

关于sql - 如何增加选择旧报价的机会,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15222274/

10-11 01:43