因为工作需要,想使用Mysql进行随机查询,下面的文章对如何做随机查询说明的很详细:
MySQL的随机数函数rand()的使用技巧(讲述随机查询的数学方法):http://www.manongjc.com/article/864.html
mysql实现随机查询(讲解每种方法的好坏):http://blog.csdn.net/godha/article/details/12690539
mysql随机查询若干条数据(有时间测量):http://blog.csdn.net/zxl315/article/details/2435368
但我的需求有点不同,我要找到数据的id不是连续的,所以想了一个办法,给数据加上了像oracle上的rownum列,对rownum列进行随机数选择。
select @rownum:=@rownum+1 as rownum, <表名>.* from (select @rownum:=0) temp, <表名>
说明:
1,random_tbl是为了生成随机生成的表
2,info_tbl为了列表要查询的字段,然后和上面的random_tbl连接,形成我们要的数据
(没有进行性能优化)
SELECT
info_tbl.userid
FROM
(SELECT DISTINCT
rownum
FROM
(SELECT
ROUND(RAND() * (SELECT
MAX(rownum)
FROM
(SELECT
@rownum_1:=@rownum_1 + 1 AS rownum, mytbl.*
FROM
(SELECT @rownum_1:=0) r, mytable mytbl
WHERE
mytbl.identType IS NOT NULL) valid_mytbl)) AS rownum
FROM
mytable) unique_mytbl
WHERE
rownum > 0) random_tbl
JOIN
(SELECT
*
FROM
(SELECT
@rownum_2:=@rownum_2 + 1 AS rownum, mytbl.*
FROM
(SELECT @rownum_2:=0) r, mytable mytbl
WHERE
mytbl.identType IS NOT NULL) valid_mytbl) info_tbl
ON random_tbl.rownum = info_tbl.rownum
LIMIT 4;