我的数据库表有 15 条记录,我想在屏幕上随机显示 9 条。
SELECT * FROM tablename ORDER BY RAND() LIMIT 9
这按预期工作,但如果表只有 9 条记录怎么办?我需要提取 15 条随机记录。
我知道这会复制一个或多个记录,但这是我的意图。
当您处理大型数据库时,RAND() 本身效率不高。
进行此类查询的更好方法是:
-1。查询最大的id(假设id为唯一键)
-2。使用 php 函数的 javascript 生成从 1 到 max_id 的 15 个随机数,推送到 -array
-3。内爆数组(例如 $id_list = "'".implode("', '", $id_list)."'")
-4。Select * from tablename where id in ($id_list)
即使您在表中只有 1 行,这也将起作用。如果您的行数少于 15(例如 11)行,则结果中将包含全部 11 行以及另外 4 个随机行:
SELECT col1, col2, ..., colN -- the columns of `tablename` only
FROM
( SELECT a.i, b.j, t.*
FROM
( SELECT *, RAND() AS rnd
FROM tablename
ORDER BY rnd LIMIT 15
) AS t
CROSS JOIN
( SELECT 1 AS i UNION ALL SELECT 2 UNION ALL
SELECT 3 UNION ALL SELECT 4 )
AS a
CROSS JOIN
( SELECT 1 AS j UNION ALL SELECT 2 UNION ALL
SELECT 3 UNION ALL SELECT 4 )
AS b
ORDER BY i, j, rnd
LIMIT 15
) AS t15
ORDER BY RAND() ;
如果您想要“更多”随机性,在结果中有重复或三次重复的行,可能有些行根本没有显示,请将最后五行替换为:
AS b
ORDER BY RAND()
LIMIT 15
) AS t15 ;
select
无论order by
. _ 但是,在订购表格数据之前,您可以使用各种方法复制表格数据。例如,union all
将行放在一起两次:
select * from
(
select * from tablename
union all
select * from tablename
) as tmp
order by rand() limit 9