我的情况是这样的......我有一个排序的机会表。我们有一项付费服务,可以让人们随时查看网站上的机会。然而,我们想要一个未付费的 View ,它将显示随机的 %/# 机会,这将始终是相同的。机会按日期排序;例如它们将过期并从列表中删除,并且应该可以免费搜索一个新的。然而,唯一的问题是他们总是必须展示同样的机会。 (例如,我不能只选择随机行,因为如果它们不断刷新,它会循环遍历它们,同样不能只选择即将过期或最远形式到期的行,因为人们最终仍会看到整个列表。
到目前为止,我唯一的解决方案是在表中添加一个额外的列以标记它是开放显示。然后在显示时对它们进行计数,如果我们缺少行,则随机选择更多行。下面是一个模型...
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);
}
谁能想出更好的方法来解决这个问题,最好是不会让我在表中添加另一列的方法,如果很多人同时加载页面可能会发生冲突。最后还有一个注意事项,它不能是随机设置的数量(例如,选择一个,跳过几个,拿下一个)。
任何想法/评论都会很有帮助, 谢谢。
最佳答案
确保用户只看到同一组随机行的一种方法是向随机数生成器提供链接到该用户的种子(例如他们的 user_id)。这意味着每个用户都会获得随机排序的行,但每个用户的随机排序始终相同。
你的代码应该是这样的:
SELECT ...
FROM ...
WHERE ...
ORDER BY random(<user id>)
LIMIT <however many>
注意:正如 Twelfth 指出的那样,随着新行的创建,它们将获得新的订单值,并可能最终出现在您的随机选择中。
关于php - MYSQL 选择 'random' 行,但如果再次调用,总是给出相同的随机行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25085814/