您现在的位置:主页 > 技术中心 > 数据库技术 > Mysql

MySQL从表中取出随机数据

来源:未知 责任编辑:智问网络 发表时间:2013-09-26 23:53 点击:

你不能在一个ORDER BY子句用RAND()值使用列,因为ORDER BY将重复计算列多次。然而在MySQL3.23中,你可以做: SELECT * FROM table_name ORDER BY RAND(),这是有利于得到一个来自SELECT * FROM table1,table2 WHERE a=b AND c   实现随机,从手册中找到了下面这个语句,可以完成任务:

  SELECT * FROM table_name ORDER BY rand() LIMIT 5;

  rand在手册里是这么说的::

  RAND()

  RAND(N)

  返回在范围0到1.0内的随机浮点值。如果一个整数参数N被指定,它被用作种子值。

  mysql> select RAND();

  -> 0.5925

  mysql> select RAND(20);

  -> 0.1811

  mysql> select RAND(20);

  -> 0.1811

  mysql> select RAND();

  -> 0.2079

  mysql> select RAND();

  -> 0.7888

  你不能在一个ORDER BY子句用RAND()值使用列,因为ORDER BY将重复计算列多次。然而在MySQL3.23中,你可以做: SELECT * FROM table_name ORDER BY RAND(),这是有利于得到一个来自SELECT * FROM table1,table2 WHERE a=b AND c

  注意在一个WHERE子句里的一个RAND()将在每次WHERE被执行时重新评估。

  但试了一下,8千条记录的表,执行一次需要0.08 sec,慢了些。后来请教了google,得到如下代码:

  SELECT * FROM table_name AS r1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM table_name)) AS id) AS r2 WHERE r1.id >= r2.id ORDER BY r1.id ASC LIMIT 5;

  执行效率需要0.02 sec.可惜的是,只有mysql 4.1.*以上才支持这样的子查询.

    发表评论
    请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
    评价:
    表情:
    用户名: 验证码:点击我更换图片

    推荐热点

    • mysql-mmm
    • mysqldump命令——MySQL数据库备份还原
    • Oracle数据导入MySQL的快捷工具:MySQL Migration Tool
    • 简简单单储存过程——循环一个select结果集
    • MySQL数据库十大优化技巧
    • Mysql安装笔记
    • Mysql主主复制架构配置
    • Mysql的Procedure 参数为NULL问题分析
    • MySQL Stmt预处理提高效率问题的小研究
    ?? - ?? - ÝřŝžľŘÝź - TAGąęÇŠ - RSSśŠÔÄ - ??
    Copyright © 2004-2024 上海卓卓网络科技有限公司