e股脑电脑教程网
  • 首 页
  • 操作系统
  • 应用软件
  • 下载工具
  • 影音视频
  • 办公软件
  • 媒体制作
  • 网站建设
  • 平面设计
  • 数据库
  • 程序开发
  • 视频教程
编辑推荐: | 文章搜索:
您现在的位置: e股脑 >> 数据库 >> MySQL教程 >> MySQL 从表中取出随机数据 >> 教程正文
 
教程搜索
 
 
相关教程
  • MySQL的管理工具:phpMyA
  • MySQL常用操作命令
  • 安装MySQL步骤详解
  • 从MySQL得到最大的性能
  • 通过C API远程连接Mysql 
  • MySQL5安装详细介绍
  • 如何在windows系统下安装
  • 在Linux/Unix平台下安装M
  • MySQL5数据库与管理相关的
  • MySQL的常见错误
  • 在MySQL数据库中执行SQL语
  • MySQL5新特点(视图)
  • MySQL5新特点(触发器)
  • MySQL5新特点(存储过程)
  • MySQL 从表中取出随机数据
  • 关于Mysql 4.1语言问题的
 
 
赞 助 商
 
 
MySQL 从表中取出随机数据
  • 来源:e股脑
  • 点击次数:
  • 更新时间:2008-2-4

  实现随机,从手册中找到了下面这个语句,可以完成任务:

  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 4.1语言问题的完美解决方法
  • 下一篇教程: MySQL5新特点(存储过程)
  •  

    关于本站 | 广告联系 | 版权声明 | 使用帮助

    Copyright © 2004-2008 www.egunao.com All rights reserved.