我看到了许多与此主题有关的主题,但在了解如何做到这一点上一直没有成功。例如,如果我有此表:+------+-------+-------+| id | name | class |+------+-------+-------+| 5 | test | one | | 10 | test2 | one | | 12 | test5 | one | | 7 | test6 | two | +------+-------+-------+并且我只想显示“一个”类中的X个随机行,我该怎么做?注意:这是一张大桌子,所以我不想使用ORDER BY RAND。使用MySQL选择随机行
3 回答
偶然的你
TA贡献1841条经验 获得超3个赞
ORDER BY RAND()
如您所知,大多数人推荐的解决方案无法扩展到大型表。
SET @r := (SELECT FLOOR(RAND() * (SELECT COUNT(*) FROM mytable)));SET @sql := CONCAT('SELECT * FROM mytable LIMIT 1 OFFSET ', @r);PREPARE stmt1 FROM @sql;EXECUTE stmt1;
我在《SQL反模式:避免数据库编程的陷阱》一书中介绍了该解决方案和其他解决方案。
如果要使用PHP进行此操作,则可以执行以下操作(未测试):
<?php$mysqli->begin_transaction();$result = $mysqli->query("SELECT COUNT(*) FROM mytable")$row = $result->fetch_row(); $count = $row[0]; $offset = mt_rand(0, $count);$result = $mysqli->query("SELECT * FROM mytable LIMIT 1 OFFSET $offset");...$mysqli->commit();
汪汪一只猫
TA贡献1898条经验 获得超8个赞
select ID, NAME, CLASSfrom YOURTABLEwhere CLASS='one'order by rand()limit $x
排序rand()
不是特别有效,但这是最小/最快捷的方式。
添加回答
举报
0/150
提交
取消