这是在我的网站上排序搜索结果的一个问题,
进行搜索时,内容页上会出现随机结果,此页面也包含分页。用户跟随我的SQL查询。
SELECT * FROM table ORDER BY RAND() LIMIT 0,10;
所以我的问题是
发布于 2012-05-24 02:55:10
MySQL中的随机排序是一个棘手的问题。在过去,我通常选择尽可能地绕开这个问题。通常,用户不会不止一次或两次返回这样的一组页面。因此,这让您有机会避免所有各种令人讨厌的随机顺序实现,而更倾向于一对简单但不是100%的随机解决方案。
解决方案1
从许多已编入索引以进行排序的现有列中选择。这可以包括在上面创建、修改的时间戳或任何其他可以排序的列。当用户第一次访问站点时,在数组中使用这些工具,随机选择一个,然后随机选择ASC
或DESC
。
在您的示例中,每次用户返回第1页时,选择新的内容,将其存储在会话中。每一个后续页面,都可以使用该类型生成一组一致的分页。
解决方案2
您可以有一个额外的列来存储用于排序的随机数。很明显,它应该被编入索引。定期运行以下查询;
更新表集rand_col = RAND();
这可能不适用于您的规范,因为您似乎要求每个用户每次访问第1页时都要看到不同的内容。
发布于 2014-05-17 02:01:34
使用RAND(种子)。引用docs:“如果指定了常量整数参数N,则将其用作种子值。”(兰德)。
在上面的示例中,结果顺序是rand,但始终是相同的。你只需改变种子就能得到新的订单。
SELECT * FROM your_table ORDER BY RAND(351);
每次用户点击第一个结果页面并将其存储在用户会话中时,您都可以更改种子。
发布于 2012-05-24 00:30:31
首先,您应该停止使用ORDER语法。这将对大行集的性能造成不良影响。
您需要手动确定限制约束。如果您仍然希望使用随机结果,并且不希望用户在下一页看到相同的结果,则唯一的方法是将此搜索会话的所有结果保存在数据库中,并在用户导航到下一页时操作这些信息。
在网页设计中,你应该理解的下一件事--在你的网站上使用任意的随机数据块,对用户的视觉感知非常、非常、非常糟糕。
https://stackoverflow.com/questions/10729633
复制相似问题