我的数据库表有15条记录,我想在屏幕上随机显示9条记录。
SELECT * FROM tablename ORDER BY RAND() LIMIT 9这可以按预期工作,但是如果表只有9条记录呢?我需要随机抽取15条记录。
我知道这将复制一个或多个记录,但这是我的意图。
发布于 2012-11-29 03:27:43
无论order by如何,您的select将只拉取表中的记录数。但是,在对表数据进行排序之前,可以使用各种方法复制表数据。例如,将行union all放在一起两次:
select * from
(
select * from tablename
union all
select * from tablename
) as tmp
order by rand() limit 9发布于 2012-11-29 04:22:16
在处理大型数据库时,RAND()本身并不高效。
执行此类查询的更好方法是:
-1。查询最大id (假设id为唯一键)
-2.使用php函数的javascript生成15个随机数,从1到max_id,推送到-array
-3.内爆数组(例如$id_list = "'".implode("','",$id_list)."'")
-4.Select * from tablename where id in ($id_list)
发布于 2012-11-29 05:02:05
即使表中只有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 ;https://stackoverflow.com/questions/13612789
复制相似问题