使用MySQL选择随机行

我看到了许多与此主题有关的主题,但在了解如何做到这一点上一直没有成功。


例如,如果我有此表:


+------+-------+-------+

| id   | name  | class |

+------+-------+-------+

|    5 | test  | one   | 

|   10 | test2 | one   | 

|   12 | test5 | one   | 

|    7 | test6 | two   | 

+------+-------+-------+

并且我只想显示“一个”类中的X个随机行,我该怎么做?


注意:这是一张大桌子,所以我不想使用ORDER BY RAND。

使用MySQL选择随机行

PIPIONE
浏览 438回答 3
3回答

偶然的你

ORDER BY RAND()如您所知,大多数人推荐的解决方案无法扩展到大型表。SET&nbsp;@r&nbsp;:=&nbsp;(SELECT&nbsp;FLOOR(RAND()&nbsp;*&nbsp;(SELECT&nbsp;COUNT(*)&nbsp;FROM&nbsp;mytable)));SET&nbsp;@sql&nbsp;:=&nbsp;CONCAT('SELECT&nbsp;*&nbsp;FROM&nbsp;mytable&nbsp;LIMIT&nbsp;1&nbsp;OFFSET&nbsp;',&nbsp;@r);PREPARE&nbsp;stmt1&nbsp;FROM&nbsp;@sql;EXECUTE&nbsp;stmt1;我在《SQL反模式:避免数据库编程的陷阱》一书中介绍了该解决方案和其他解决方案。如果要使用PHP进行此操作,则可以执行以下操作(未测试):<?php$mysqli->begin_transaction();$result&nbsp;=&nbsp;$mysqli->query("SELECT&nbsp;COUNT(*)&nbsp;FROM&nbsp;mytable")$row&nbsp;=&nbsp;$result->fetch_row();&nbsp;$count&nbsp;=&nbsp;$row[0];&nbsp;$offset&nbsp;=&nbsp;mt_rand(0,&nbsp;$count);$result&nbsp;=&nbsp;$mysqli->query("SELECT&nbsp;*&nbsp;FROM&nbsp;mytable&nbsp;LIMIT&nbsp;1&nbsp;OFFSET&nbsp;$offset");...$mysqli->commit();

汪汪一只猫

select&nbsp;ID,&nbsp;NAME,&nbsp;CLASSfrom&nbsp;YOURTABLEwhere&nbsp;CLASS='one'order&nbsp;by&nbsp;rand()limit&nbsp;$x排序rand()不是特别有效,但这是最小/最快捷的方式。

宝慕林4294392

SELECT&nbsp;*&nbsp;FROM&nbsp;`table`&nbsp;WHERE&nbsp;`class`="one"&nbsp;ORDER&nbsp;BY&nbsp;RAND()&nbsp;LIMIT&nbsp;5
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

MySQL