我的情况就是这样......我有一张机会表,已经整理好了。我们提供付费服务,让人们可以随时查看网站上的商机。但是我们想要一个无偿的视图,它会显示随机的%/#个机会,这些机会总是一样的。机会按日期排序;例如它们将过期并从列表中删除,新的应该在免费搜索上。然而,唯一的问题是他们总是要展示同样的机会。 (例如,我不能只选择随机行,因为如果它们保持刷新,它会循环通过它们,同样也不能只接受那些即将到期或最远时到期的行,因为人们仍然最终看到了整个清单。
到目前为止,我唯一的解决方案是在表格中添加一个额外的列,以标记它是打开的显示。然后在显示器上计算它们,如果我们缺少行,那么随机选择一些。下面是模拟......
SELECT count(id) as total FROM opportunities WHERE display_status="open" LIMIT 1000;
...
while(total < requiredNumber) {
UPDATE opportunities SET display_status="open" WHERE display_status="private" ORDER BY random() LIMIT (required-total);
}
任何人都可以想出一个更好的方法来解决这个问题,最好不要让我在表中添加另一个列,如果很多人一次加载页面,可能会发生冲突。最后一个注意事项,它不能是随机设置的数量(例如选择一个,跳过几个,然后选择下一个)。
任何想法/评论都会非常有帮助, 感谢。
答案 0 :(得分:2)
确保用户只看到同一组随机行的一种方法是向随机数生成器提供链接到该用户的种子(例如其user_id)。这意味着每个用户都会获得行的随机排序,但每个用户的随机排序始终相同。
您的代码将是:
SELECT ...
FROM ...
WHERE ...
ORDER BY random(<user id>)
LIMIT <however many>
注意:正如Twelfth指出的那样,当创建新行时,它们将获得新的订单值,最终可能会随机选择。
答案 1 :(得分:1)
我不喜欢丢失信息的类型......包括有人看到的随机行。但是我不喜欢修改你现有的表格想法......
创建第二个表作为randon_rows或该程度的东西,以保存用户的ID和他们看到的随机记录的ID。只要您需要再次查找相同的行,就可以内联到表中。您也可以在表格中添加expirey日期和排序,这样用户就不会在相同的10行中停留。