我看到了許多與此主題有關(guān)的主題,但在了解如何做到這一點(diǎn)上一直沒(méi)有成功。例如,如果我有此表:+------+-------+-------+| id | name | class |+------+-------+-------+| 5 | test | one | | 10 | test2 | one | | 12 | test5 | one | | 7 | test6 | two | +------+-------+-------+并且我只想顯示“一個(gè)”類中的X個(gè)隨機(jī)行,我該怎么做?注意:這是一張大桌子,所以我不想使用ORDER BY RAND。使用MySQL選擇隨機(jī)行
3 回答

偶然的你
TA貢獻(xiàn)1841條經(jīng)驗(yàn) 獲得超3個(gè)贊
ORDER BY RAND()
如您所知,大多數(shù)人推薦的解決方案無(wú)法擴(kuò)展到大型表。
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反模式:避免數(shù)據(jù)庫(kù)編程的陷阱》一書中介紹了該解決方案和其他解決方案。
如果要使用PHP進(jìn)行此操作,則可以執(zhí)行以下操作(未測(cè)試):
<?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貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個(gè)贊
select ID, NAME, CLASSfrom YOURTABLEwhere CLASS='one'order by rand()limit $x
排序rand()
不是特別有效,但這是最小/最快捷的方式。

寶慕林4294392
TA貢獻(xiàn)2021條經(jīng)驗(yàn) 獲得超8個(gè)贊
SELECT * FROM `table` WHERE `class`="one" ORDER BY RAND() LIMIT 5
添加回答
舉報(bào)
0/150
提交
取消