MySQL数据库中随机获取一条或多条记录

MySQL查询多条数据,只取最新的一条数据 首先 查询表fp_studentItem中的studentid=1;有5条数据,我只想要id=163的最新数据 两种方法: 1、SELECT * FROM fp_studentItem where id=( SELECT MAX(id) FROM fp_studentItem where studentid=1) SELECT * FROM fp_studentItem where id=( SELECT MAX(id) FROM fp_studentItem where studentid=1 阅读详情

在开发过程中遇到了一个问题,使用MySQL数据库,用SQL语句在表中随机获取一条或多条数据,看似简单,但是往深层研究的话还是很有深度的,查了好多资料,接下来给大家分享一下: 

1. 随机获取单条数据

SELECT * FROM table_name ORDER BY RAND() LIMIT 1;

MySQL中的RAND()函数调用可以在0和1之间产生一个随机数。

这条SQL语句可以随机取出一条数据,而且将limit 1改为获取多条数据,得到的数据也是随机的。但是,在MYSQL的官方手册,里面针对RAND()的提示大概意思就是,在ORDER BY从句里面不能使用RAND()函数,因为这样会导致数据列被多次扫描。导致效率相当的低!但是在MYSQL 3.23版本中,仍然可以通过ORDER BY RAND()来实现随机。

尽量不用这种写法!

2. 随机获取单条数据

  1.  

    SELECT * FROM table_name AS t1 JOIN (SELECT ROUND(RAND()*((SELECT MAX(id)

  2.  

    FROM table_name)-(SELECT MIN(id) FROM table_name))+(SELECT MIN(id)

  3.  

    FROM table_name)) AS id)AS t2 WHERE t1.id>=t2.id ORDER BY t1.id LIMIT 1;

简写版:

  1.  

    SELECT * FROM table_name AS t1 JOIN (SELECT ROUND(RAND()*(SELECT MAX(id)

  2.  

    FROM table_name)) AS id) AS t2 WHERE t1.id>=t2.id ORDER BY t1.id LIMIT 1;

简化的写法将表中的MIN(id)看做0,是对整个数据表进行操作,而第一条可以对某一范围的数据进行操作,视情况而定。

在MySQL中,ROUND()函数用于数据的四舍五入。

这条sql语句的执行效率相当的高,但是,将limit 1改为获取多条数据后,取出的数据不是随机的,原因是order by引起的,

order by将t1.id给排序了,因此获取到的数据不是随机的。

如果是随机获取单条数据的话适用,获取多条的话不适用!

3.随机获取单条或多条数据

  1.  

    SELECT * FROM table_name as t1 WHERE t1.id>=(RAND()*((SELECT MAX(id) FROM

  2.  

    table_name)-(SELECT MIN(id) FROM table_name))+(SELECT MIN(id) FROM table_name)) LIMIT 1;

简写版:

SELECT * FROM table_name as t1 WHERE t1.id>=(RAND()*(SELECT MAX(id) FROM table_name))LIMIT 1;

简写效果同上,视情况而定。

这条sql语句的执行效率也是非常高,将limit 1改为获取多条数据,效率也是很高,而且得到的数据是随机的。

随机获取单条或多条数据都适用!

总结:语句1的效率低下,切忌使用,不过在数据量少,MYSQL版本支持的情况下可以使用;
            语句2的效率高,在随机取出一条记录的情况下可以使用;
            语句3的效率也高,在随机取出一条或多条记录的情况下都可以使用,不过在取出一条记录时优先使用语句2,因为采用        JOIN的语法比直接在WHERE中使用函数效率还是要高一些的。

注:语句2和语句3在操作数据库时,数据都是同一种类型或者某一类型的数据是连续存放在一起的,否则取出的数据可能不是所 需类型的随机数据,而语句1在任何情况下取出的都是所需要的随机数据。

MYSQL随机抽取查询 MySQL Order By Rand()效率问题 MYSQL随机抽取查询:MySQL Order By Rand()效率问题一直是开发人员的常见问题,俺们不是DBA,没有那么牛B,所只能慢慢研究咯,最近由于项目问题,需要大概研究了一下MYSQL的随机抽取实现方法 立即下载

相关推荐

DAP-Link DIY复刻指南

DAP-Link是ARM开源的一个项目,主要用于代码下载以及调试,支持SWD和JTAG调试接口,对于开发嵌入式的同学相信都或多或少有所耳闻。除了DAP-Link之外还有很多同类型的调试器,如ST-LinkJ-Link,但是这些都是不开源的,无法复刻或进行二次开发。但DAP-Link不同,完全开源,不用担心侵权问题,且随着开源社区大家的共同努力,DAP-Link经过了不断的迭代,先如今已取代ARM之前推出的CMSIS-DAP开源项目。

爱出名的狗腿子 1万+

mysql 获取一条数据_MySQL数据库中随机获取一条或多条记录

在开发过程中遇到了一个问题,使用MySQL数据库,用SQL语句在表中随机获取一条或多条数据,看似简单,但是往深层研究的话还是很有深度的,查了好多资料,接下来给大家分享一下:1. 随机获取单条数据SELECT * FROM table_name ORDER BY RAND() LIMIT 1;MySQL中的RAND()函数调用可以在0和1之间产生一个随机数。这条SQL语句可以随机取出一条数据,而且将...

weixin_36478445的博客 1万+

企业碳排放计算方法与实践:从年度总量到月度分配的完整流程

本文系统介绍了企业碳排放计算的全流程方法,包括数据预处理、能源活动与产品生产碳排放计算、年度汇总及月度分配优化。通过ARIMA模型预测补充缺失数据,采用二次规划算法实现基于用电量模式的月度碳排放分配,确保计算结果的准确性与合理性。该方法为企业碳排放管理提供了科学工具,有助于精准监控排放、制定减排策略并满足合规要求。实施中需注重数据质量控制和排放因子选择,并根据企业特点调整参数。该流程适用于制造业企业,为实现碳中和目标提供可靠的数据基础和管理支持。

applehunqiu的博客 1572

mysql 高性能随机一条数据

但是,这种方法通常会导致性能问题,因为MySQL需要扫描整个表并计算ORDER BY RAND()函数。这个方法比前两种方法更高效,但它仍然需要扫描整个表并计算COUNT(*)函数。总的来说,使用LIMIT和OFFSET是获取高性能随机一条数据的最佳方法。这个方法通过子查询生成一个随机的id,并返回id大于或等于该值的第一行。这个方法比ORDER BY RAND()更高效,但在大表上可能会变慢。可以使用LIMIT和OFFSET来获取一个随机偏移量并返回一行数据。1.使用ORDER BY RAND()

weixin_41340064的博客 3074

数据增强综述及albumentations代码使用

数据增强综述及albumentations使用基于基本图形处理的数据增强 本文涉及到的资料: 1.A survey on Image Data Augmentation for Deep Learning 2.Albumentations: Fast and Flexible Image Augmentations 3.Code 基于基本图形处理的数据增强 1.翻转;2.旋转;3.仿射变换;4.色彩空间(RGB、YUV、CMY、HSV,在图像情感分析中会影响标签。最简单的方法就是只改变一个通道。对比度、直方

qq_41917697的博客 6679

二维紧束缚模型求解程序

假如我们已经推导出了二维紧束缚模型的哈密顿量矩阵H(kx,ky)的解析形式,那么在整个布里渊区对角化矩阵就可以得到能带。从技术上说这里面有以下几个问题。 1. 缺少实空间和倒空间的坐标,使得能带难以和布里渊区高对称点对应。 2. 最容易处理的布里渊区是矩形,对于其他多边形,如果全布里渊区mesh画费米面有一定技术困难。 因此一个好的处理框架是首先给出实空间原子坐标,给出实空间哈密顿量,...

wwxy1995的博客 4081

mysql中有多条除ID外相同数据只取其中一条(用户登陆)

        建用户表并测试过程中,发现表中可能有多条用户名和密码相同的数据,登陆时需要返回一个user对象,但是简单的select语句返回一个列表,可用以下sql语句代替 SELECT `username`,`password` FROM t_users WHERE `id` = (SELECT MIN(`id`) FROM `t_users` WHERE `username`='adm...

iteye_16005的博客 1279

Redis架构演进:从主从、哨兵到集群,如何支撑亿级流量的秒杀场景?

本文深入探讨了分布式缓存Redis的三种核心高可用模式:主从复制、哨兵模式与集群模式。以高并发的电商秒杀业务为切入点,我们分析了每种模式的优缺点和适用场景,并最终选择Redis集群模式作为最佳解决方案。文章提供了基于Spring Boot和Spring Data Redis的完整实现代码,详细展示了如何配置和使用Redis集群来应对高并发、高可用的挑战,旨在帮助开发者在实际项目中做出正确的技术选型和架构设计。

lingRJ777的博客 723

PHP随机获取Mysql数据表的一条或多条记录

PHP随机获取Mysql数据表的一条或多条记录 SELECT * FROM users WHERE userId >= ((SELECT MAX(userId) FROM users)-(SELECT MIN(userId) FROM users)) * RAND() + (SELECT MIN(userId) FROM users) LIMIT 1 执行该sql语句,用时0.039s,效...

a1005398026的博客 2417

Agile Modbus使用和学习笔记

i < len;这里仅仅需要提供获取函数即可,离散输入是只读类型i++) {return 0;只读类型寄存器i++) {return 0;i < len;

Car12 167

视觉Transformer实战 | Data-efficient image Transformer(DeiT)详解与实现

在计算机视觉领域,Vision Transformer (ViT) 已经证明了纯 Transformer 架构在图像分类任务上的强大能力。然而,ViT 通常需要在大规模数据集上预训练才能达到最佳性能,DeiT (Data-efficient image Transformer) 通过引入一系列训练策略和优化,使得 Transformer 模型能够在相对较小的数据集上取得优异表现。本节将详细介绍 DeiT 的技术原理,并使用 PyTorch 从零开始实现 DeiT 模型。

盼小辉丶的博客 1339

php随机显示数据库一条内容,如何在数据库中随机取出1条记录?PHP

/***MySQL随机取记录**@param$t表*@param$cID列,默认为id*@param$n取多少个*@param$w条件语句*@param$fbool是否强制以多维数组形式返回,默认false*@returnarray取1个直接返回结果数组(除非$f为true),取>1个返回多维数组,用foreach取出*/func...

weixin_33561910的博客 958

05、CAN 总线拓扑结构详解,线型拓扑搭建要点

CAN总线拓扑与信号完整性优化 本文通过工程实践经验,深入剖析了CAN总线系统中信号完整性的关键要素。主要内容包括: 终端电阻的核心作用:必须严格在总线两端配置120Ω电阻,形成60Ω等效阻抗以匹配双绞线特性阻抗,避免信号反射导致的波形畸变。 阻抗匹配原理:解释了信号能量管理机制,指出阻抗不连续会导致信号反射,并通过示波器波形特征(如振铃现象)判断阻抗失配问题。 信号完整性多维要求:强调信号质量不仅涉及波形存在与否,还包括边沿斜率、共模电压范围等关键参数,这些直接影响通信可靠性。 工程实践建议:提供了终端电

2401_88858637的博客 176

MySQL中如何随机获取一条记录

点击上方蓝字关注我随机获取一条记录是在数据库查询中常见的需求,特别在需要展示随机内容或者随机推荐的场景下。在 MySQL 中,有多种方法可以实现随机获取一条记录,每种方法都有其适用的情况和性能特点。在本文中,我们将探讨几种常用的方法,并推荐适合不同情况下的最佳方法。方法一:使用ORDER BY RAND()这是最常见的随机获取一条记录的方法之一:SELECT * FROM testdb....

gjc592的博客 4472

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

mysql随机获取一条或多条记录的不随机问题

最近公司有个接口,需要从数据库查询的数据中随机获取一条(n条)返回。 方式1: 大家都能百度的到的(最简单粗暴,也是效率最低的)方法是下面这种: SELECT id FROM table ORDER BY RAND() limit 1 这种方式的问题大家也都知道: 在ORDER BY从句里面不能使用RAND()函数,因为这样会导致数据列被多次扫...

weixin_41633157的博客 877

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

随机获取Mysql数据表的一条或多条记录

随机获得MySQL数据表的一条或多条记录有很多方法,下面我就以users(userId,userName,password……)表(有一百多万条记录)为例,对比讲解下几个方法效率问题: select * from users order by rand() LIMIT 1 执行该sql语句,老半天没有反应,最后被迫手动停止执行,怎个伤人了得啊!后来我查了一下MYSQL手册,里面针对RAND()的提示大概意思就是,在ORDER BY从句里面不能使用RAND()函数,因为这样会导致数据列被多次扫描,导致效率

一万年太久,只争朝夕 681

MySQL数据库从表中随机获取一条或者多条记录

MySQL数据库从表中随机获取一条或者多条记录

PHP网站建设,PHP技术分享 1万+

mysql每天随机查一条记录表_随机获取Mysql数据表的一条或多条记录

随机获得MySQL数据表的一条或多条记录有很多方法,下面我就以users(userId,userName,password……)表(有一百多万条记录)为例,对比讲解下几个方法效率问题:select * from users order by rand() LIMIT 1执行该sql语句,老半天没有反应,最后被迫手动停止执行,怎个伤人了得啊!后来我查了一下MYSQL手册,里面针对RAND()的提示大...

weixin_39534780的博客 415

【sql】随机获取Mysql数据表的一条或多条记录

文章转载自nieyanlong 随机获得MySQL数据表的一条或多条记录有很多方法,下面我就以users(userId,userName,password......)表(有一百多万条记录)为例,对比讲解下几个方法效率问题: 1.select * from users order by rand() LIMIT 1 执行该sql语句,老半天没有反应,最后被迫手动停止执行,怎个伤人了得啊!后来

开发随笔-猫咪酱 663

Mysql实现随机查询一条或多条记录

需求 1.数据量超过10W+; 2.能够在0.0秒内(100ms)完成数据的查询; 3.能够实现良好的随机效果。 数据量小的方案 SELECT * FROM `st_poetry` ORDER BY RAND() LIMIT 1; 网上现有方案 网上以下两种思路对数据库表有强制要求,否则无法实现随机效果(表的ID必须为连续自增长的正整数) 方案一: SELECT * FROM `st_poetry` WHERE id >= (SELECT floor( RAND() * ((SE

良心有约 6890

从mysql中随机读取多条记录

mysql 随机读取多条数据

欧程部落 4195

MYSQL:随机抽取一条数据库记录

  今天我们要实现从随机抽取一条数据库记录的功能,并且抽取出来的数据记录不能重复;   1、首先我们看文章表中的数据:      2、实现功能代码如下:    1   /** 2 * 获取随机的N篇文篇 3 * @param int $len 文章篇数 4 */ 5 public static functio...

536

sql随机读取一条记录

在实际工作中,我碰到一个问题,就是在需要在某个表里面读取任意一条记录(随机出题)。 一开始的时候,我是想着用代码去控制。具体思想是,从这个表里面读取所有的主键id,然后随机挑选一个,再去读取这条记录。但是后来想了一下,感觉这么做很不靠谱。怎么说呢,首先,代码需要写很多,需要两次查询;其次,数据量大的时候,也要读取所有数据?这不好吧。。。 于是,我想到了应该从sql进行分析。sql产生那么多年了

vincent_gor专辑 2947

PHP从数据库中随机选择一条记录

PHP从数据库中随机选择一条记录先找出数据表中所有记录的总数,并在总数范围内选择一个随机数,然后再从数据库中请求选中的随机数对应的那一行记录。 ...

cmcsdn1314的博客 913
上一篇: 数据库的几种去重方法总结
下一篇: JVM的垃圾回收机制 总结(垃圾收集、回收算法、垃圾回收器)
Mr.姚先森
博客等级 码龄11年 26粉丝 32原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值