我有一个带有名称的 MySQL 表。我正在尝试从表中以随机顺序获取随机名称列表,而不会对性能造成很大影响。我找到了一个执行此操作的查询并实现了它,但有一个缺陷......假设我在数据库中有 10 个名称,我使用查询请求 2 个随机名称。我通常会得到 2 个回报,但有时我只会得到一个。如果我要求回复 9 个名字,这当然会变得更糟。我会得到 5,然后下一次是 8,然后是 9,然后是 2。我相信这与选择随机 id 然后从那里上升的脚本有关,问题是我想要完全我每次都请求返回的名称数量(除非数据库不包含足够的名称,在这种情况下,它会返回所有名称,但顺序是随机的。)
这是我正在使用的查询:
SELECT Name
FROM RandomNames AS r1
JOIN (
SELECT (Rand() * (SELECT MAX(ID) FROM RandomNames)) AS ID
) AS r2
WHERE r1.ID >= r2.ID
ORDER BY r1.ID AS C
LIMIT ?