我有一个名字在其中的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 ?
答案 0 :(得分:1)
select name from (SELECT Rand() temp, Name
FROM RandomNames) a order by temp
LIMIT ?
这个怎么样?