【发布时间】:2013-12-16 13:36:27
【问题描述】:
我需要能够从一个随着时间逐渐增长和增长的表中选择 3 个唯一的随机 MySQL ID 行,并且有一个 WHERE 'status' = 'available'。所以它只在 status = available 时选择 id 号。
不会有任何空白,因为所有数据都会保留以符合记录保存要求,如果用户删除了数据,它实际上并没有被删除,只是 STATUS 被标记为“已删除”。
我已经阅读了很多关于该主题的帖子,但这一切似乎都归结为只选择 1 个结果,然后重复 3 次,问题是,它可能会再次选择相同的 ID,所以我的问题的任何解决方案都会不胜感激。
谢谢
:)
我正在考虑做这样的事情 (取自这里...MySQL select 10 random rows from 600K rows fast)
SELECT id
FROM table AS r1 JOIN
(SELECT (RAND() *
(SELECT MAX(id)
FROM table)) AS id2)
AS r2
WHERE r1.id >= r2.id2 AND status = 'available'
ORDER BY r1.id ASC
LIMIT 1
这给了我我需要的东西,但它只返回 1 个随机唯一“选择”,加上如果我将它限制为 3,它并不总是选择 3,如果它确实选择 3,它们似乎总是顺序的,即不是随机的!
有没有办法重复查询,存储选择的 ID 并继续循环/运行查询,直到随机选择不同的 3 个 ID。这是我的问题:)
【问题讨论】:
-
这可能很快,但它往往会在删除后“更喜欢”记录。