我有一个包含引号的数据库。我喜欢显示随机引号。但有两个条件。
- 不应选择上周显示的报价。
- 报价显示的距离越远,它被选中的机会就越大。
第一个并不难。我可以为此使用 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()
在许多系统上不起作用。
更新:这是一个有效的 MySQL 示例。