MySQL的limit是针对结果集进行分页。

2024-08-27 16:48

本文主要是介绍MySQL的limit是针对结果集进行分页。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天帮别人调bug时,一个功能需要计算总页数,结果呢,同事后面加了个limit。
代码如下:

SELECT
count(*)
FROM t_order o LEFT JOIN t_customer c ON o.customerId = c.id
LEFT JOIN t_order_state os ON o.orderStatId = os.id
LEFT JOIN t_source_type st ON c.sourceTypeId = st.id
LEFT JOIN t_sys_user su ON o.firstHandlerId = su.id
LEFT JOIN t_sys_user su2 ON c.partnerId = su2.id
LEFT JOIN t_order_allot oa ON oa.orderId = o.id
inner  JOIN (SELECT ts.`name` as schoolName,ts.id as schoolId,ts.channelId,tc.name as courseName,tc.id as courseId FROM t_training_school as ts INNER JOIN t_training_course as tc ON tc.schoolId = ts.id
union all
SELECT gs.`name` as schoolName,gs.id as schoolId,gs.channelId,gc.title as courseName,gc.id as courseId FROM t_guoji_school as gs INNER JOIN t_guoji_course as gc ON gc.school_id = gs.id
union all
SELECT bs.`name` as schoolName,bs.id as schoolId,bs.channelId,bc.title as courseName,bc.id as courseId FROM t_biz_school as bs INNER JOIN t_biz_course as bc ON bc.school_id = bs.id
union all
SELECT ads.`name` as schoolName,ads.id as schoolId,ads.channelId,ac.name as courseName,ac.id as courseId FROM t_adult_school as ads INNER JOIN t_adult_course as ac ON ac.schoolId = ads.id) as tSchool
on oa.schoolId=tSchool.schoolId and oa.schoolCourseId=tSchool.courseId and oa.channelId=tSchool.channelId
limit 0,10

这个时候呢,结果是 22条数据:
这里写图片描述

后来呢,当点击第二页的时候呢,总显示null,实在是不明白,明明有22条啊。
第二页,其他sql语句都一样只是limit变为limit 10,10。
结果:
这里写图片描述

后来更同事讨论后,才知道,它是先查询完了再进行分页(limit),
而我之前认为是,它去查询的时候,是直接从第10条开始去查询。
可是真正的情况时:它是去吧数据库里的所有数据全部都查询了一遍,
并都放在结果集里,之后,再通过limit的参数来进行分页。

比如我的情况:第一次进来时,limit 0,10 ,这时结果集里的数据是:
这里写图片描述
只有22这一条数据。它再进行limit 0,10.因为只有一条数据,所以起始行为0肯定对。

当第二次进来时,limit 10,10,这时结果集里的数据依然是count(*) 22 这一条数据,
而此时的起始行是10,这就错了。所以也就出现null的情况。

**总结:MySQL中limit 是等你把数据库里的所有数据都查询后得到的结果集,
再去分页,而不是根据limit里的起始行与偏移量去查询。**

这篇关于MySQL的limit是针对结果集进行分页。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1112234

相关文章

SQL server数据库如何下载和安装

《SQLserver数据库如何下载和安装》本文指导如何下载安装SQLServer2022评估版及SSMS工具,涵盖安装配置、连接字符串设置、C#连接数据库方法和安全注意事项,如混合验证、参数化查... 目录第一步:打开官网下载对应文件第二步:程序安装配置第三部:安装工具SQL Server Manageme

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.

全面掌握 SQL 中的 DATEDIFF函数及用法最佳实践

《全面掌握SQL中的DATEDIFF函数及用法最佳实践》本文解析DATEDIFF在不同数据库中的差异,强调其边界计算原理,探讨应用场景及陷阱,推荐根据需求选择TIMESTAMPDIFF或inte... 目录1. 核心概念:DATEDIFF 究竟在计算什么?2. 主流数据库中的 DATEDIFF 实现2.1

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

MySQL 多列 IN 查询之语法、性能与实战技巧(最新整理)

《MySQL多列IN查询之语法、性能与实战技巧(最新整理)》本文详解MySQL多列IN查询,对比传统OR写法,强调其简洁高效,适合批量匹配复合键,通过联合索引、分批次优化提升性能,兼容多种数据库... 目录一、基础语法:多列 IN 的两种写法1. 直接值列表2. 子查询二、对比传统 OR 的写法三、性能分析

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串

浅谈mysql的not exists走不走索引

《浅谈mysql的notexists走不走索引》在MySQL中,​NOTEXISTS子句是否使用索引取决于子查询中关联字段是否建立了合适的索引,下面就来介绍一下mysql的notexists走不走索... 在mysql中,​NOT EXISTS子句是否使用索引取决于子查询中关联字段是否建立了合适的索引。以下

linux解压缩 xxx.jar文件进行内部操作过程

《linux解压缩xxx.jar文件进行内部操作过程》:本文主要介绍linux解压缩xxx.jar文件进行内部操作,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、解压文件二、压缩文件总结一、解压文件1、把 xxx.jar 文件放在服务器上,并进入当前目录#

SpringBoot中如何使用Assert进行断言校验

《SpringBoot中如何使用Assert进行断言校验》Java提供了内置的assert机制,而Spring框架也提供了更强大的Assert工具类来帮助开发者进行参数校验和状态检查,下... 目录前言一、Java 原生assert简介1.1 使用方式1.2 示例代码1.3 优缺点分析二、Spring Fr

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys