MySQL - 按上下文随机排序

时间:2014-01-14 10:29:06

标签: php mysql random sql-order-by

我有一个SQL查询,可以从表中获取所有文章。此列表按类别,价格和延迟排序。

有些文章具有相同的价格,相同的类别和相同的延迟,因此它们总是以相同的顺序出现。我的问题是:如果一篇文章具有相同的特征,为什么一篇文章总是会出现在另一篇文章之前?我需要按照保存在cookie中的随机元素对它们进行随机播放,这样我总能为给定用户获得相同的“随机播放”?

例如

我有100篇文章,其中5篇有相同的规格(我们称之为art1,art2,art3,art4和art5)。

按照我的订单,我得到这个清单:

art1
art2
art3
art4
art5

但由于它们具有相同的规格,我需要随机为给定的访问者随机播放它们,例如,一个用户将获得此列表:

art2
art5
art4
art1
art3

以下用户

art4
art3
art1
art5
art2

等...

诀窍是:我需要记住我如何获得每个随机订单,因此如果他在当天晚些时候回来(cookie将每天到期),我可以为给定用户获得完全相同的订单。

我知道有些网站使用上下文变量进行随机播放,但该怎么做?

2 个答案:

答案 0 :(得分:0)

您可以使用ORDER BY category, price, delay, RAND(seed)添加其他订单字段,并将Cookie中的数据作为种子添加到随机函数中。

然后,只要种子没有变化,您将始终为您的用户获得相同的数字序列。

请参阅https://stackoverflow.com/a/6160938/1634286

答案 1 :(得分:0)

有很多文章讨论如何在MySQL中随机选择记录。

使用ORDER BY RAND非常慢。如果使用PHP代码则更好。

获取记录后,将ID保存到cookie /会话中,以便稍后恢复