我的数据库表有15条记录,我想在屏幕上随机显示9条。
SELECT * FROM tablename ORDER BY RAND() LIMIT 9
这可以按预期工作,但是如果表只有9条记录怎么办?我需要拉15条随机记录。
我知道这会复制一个或多个记录,但这是我的意图。
答案 0 :(得分:0)
您的select
只会提取表中的记录数,而不管order by
。但是,在订购之前,您可以使用各种方法复制表数据。例如,行union all
一起两次:
select * from
(
select * from tablename
union all
select * from tablename
) as tmp
order by rand() limit 9
答案 1 :(得分:0)
当您处理大型数据库时,RAND()本身效率不高。
进行此类查询的更好方法是:
-1。查询最大的id(假设id是唯一键)
-2。使用php函数的javascript生成从1到max_id的15个随机数,推送到-array
-3。内爆数组(例如$ id_list =“'”。implode(“','”,$ id_list)。“'”)
-4。从tablename中选择*,其中id为($ id_list)
答案 2 :(得分:0)
即使表中只有一行,这也会有效。如果你的行数少于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 ;