C# MySql中的Random()?
是否可以从表X中检索标志=0的随机行? 使用MySql和C# 这将检索1个随机行。将1替换为N以获得N个随机行C# MySql中的Random()?,c#,mysql,random,C#,Mysql,Random,是否可以从表X中检索标志=0的随机行? 使用MySql和C# 这将检索1个随机行。将1替换为N以获得N个随机行 警告:正如其他人指出的,这可能很慢,因为它需要一个完整的表扫描。我曾经在DB2中这样做过,在DB2中,这对具有数十万行的表非常有效,但根据中的链接,MySQL的降级速度似乎更快。您永远不应该使用ORDER BY RAND()。随着桌子的增大,它变得非常缓慢。相反,你应该这样做 如果你对学习有不合理的恐惧,这里有一个解决方案可以满足你的要求: SELECT X.x_id,
警告:正如其他人指出的,这可能很慢,因为它需要一个完整的表扫描。我曾经在DB2中这样做过,在DB2中,这对具有数十万行的表非常有效,但根据中的链接,MySQL的降级速度似乎更快。您永远不应该使用
ORDER BY RAND()
。随着桌子的增大,它变得非常缓慢。相反,你应该这样做
如果你对学习有不合理的恐惧,这里有一个解决方案可以满足你的要求:
SELECT
X.x_id,
X.foobar
FROM X
JOIN (
SELECT CEIL(RAND()*(SELECT MAX(x_id) FROM X)) AS x_id
) AS Choices
USING ( x_id )
WHERE X.x_id >= Choices.x_id
AND X.flags = 0
ORDER BY X.x_id LIMIT 1;
您想返回随机数目的行还是随机选择的固定数的行?如果我没有错,这一行应该总是按第一行还是第二行排序?Rand()将始终返回一个介于0或1之间的数字。。那么按0列还是按1列排序?不确定SELECT Rand()得到的结果是0.NUM,但根据MySQL手册,使用
ORDER BY Rand()
确实得到了完全随机的结果(我刚刚测试了4行):返回一个范围为0的随机浮点值v。Granti:ORDER BY Rand()仍然让我神魂颠倒,我不敢相信它有多简单。为什么?它精确地定义了您想要的:一个随机排序的表。然后从该表中获取所需的N行(这是随机的,那些是最上面的行并不重要)。“Never,ever”有点极端,但无论如何都是好文章。
SELECT
X.x_id,
X.foobar
FROM X
JOIN (
SELECT CEIL(RAND()*(SELECT MAX(x_id) FROM X)) AS x_id
) AS Choices
USING ( x_id )
WHERE X.x_id >= Choices.x_id
AND X.flags = 0
ORDER BY X.x_id LIMIT 1;