3

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

  • 不应选择上周显示的报价。
  • 报价显示的距离越远,它被选中的机会就越大。

第一个并不难。我可以为此使用 WHERE 子句。

第二个不知如何实现。有没有一种简单的方法可以做到这一点,还是需要我为此定义一个复杂的函数?

一个可能也不错的扩展。最初大多数报价都不会显示。如果可以给一个尚未显示的报价提供更大的显示机会,那就太好了。

4

1 回答 1

3

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

这是伪代码:

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()在许多系统上不起作用。

更新:这是一个有效的 MySQL 示例

于 2013-03-05T11:22:47.503 回答