我正在寻找一种随机抽样mysql表的方法,并且正在阅读这篇文章 - http://jan.kneschke.de/projects/mysql/order-by-rand/
但是,这对我的情况不起作用,因为mysql中的许多表都没有" rowid" / autoincrement列。在这种情况下,我是否仍然可以随机抽样行?
这是表结构:
'CREATE TABLE `table_name` (
`col1` date DEFAULT NULL,
`col2` bigint(20) DEFAULT NULL,
`col3` varchar(255) DEFAULT NULL,
`col4` varchar(64) DEFAULT NULL,
`col5` varchar(64) DEFAULT NULL,
`col6` bigint(20) DEFAULT NULL,
`col7` bigint(20) DEFAULT NULL,
`col8` varchar(255) DEFAULT NULL,
`col9` decimal(16,5) DEFAULT NULL,
`col10` bigint(20) DEFAULT NULL,
`col11` varchar(64) DEFAULT NULL,
`col12` bigint(20) DEFAULT NULL,
`col13` bigint(20) DEFAULT NULL,
`col14` bigint(20) DEFAULT NULL,
`col15` bigint(20) DEFAULT NULL
) ENGINE=BRIGHTHOUSE DEFAULT CHARSET=utf8'
答案 0 :(得分:0)
要在sql中生成一个字段,请执行以下操作:
select *
from (select @id:=@id+1, a.*
from `table_name` a,
(select @id:=0) b
) x
order by rand() limit 10
这部分sql
from `table_name` a,
(select @id:=0) b
只需一行就可以在表格和选择之间创建一个笛卡儿式计划。然后在它之外你只需增加变量@id:=@id+1
。您将获得生成的字段。
然后将其包装为子查询并按rand排序。
请参阅SQLFiddle
要测试它,只需继续点击Run Sql按钮。
编辑
因为它不适用于' infobright Optimizer'尝试使用普通的mysql函数,看看会发生什么:
select * from (
select n id, a.*
from `table_name` a,
(select RAND() n) b
) x order by rand() limit 5
在此处查看SQLFiddle 2
您将看到随机数将相同,但col2值将在"运行sql"按钮。