分页查询如何实现_MySQ如何实现分页查询

点击蓝字03ef2c3014054eae4654d282384caaa3.png关注我们!每天获取最新的编程小知识!

源 / php中文网      源 / www.php.cn

MySQL中实现分页查询:在数据量较小的情况下可使用limit查询来实现分页查询,在数据量大的情况下使用建立主键或唯一索引来实现,另外可通过order by对其排序

7130abe5e7405910a00f566f3b20ff6d.png

(查看原文请点击本文末尾左下角:

在后端项目中总是避免不了admin管理,当后台管理需要展示数据时就会需要用到分页,接下来在文中将为大家分享的时MySQL如何实现分页查询,具有一定的参考作用,希望对大家有所帮助。

一般情况下在MySQL中进行分页查询时,会用到limit查询,而且在查询中都会使用到order by来进行排序。接下来将具体介绍MySQL是如何实现分页查询的

分页需求:

客户端通过传递start(页码),limit(每页显示的条数)两个参数去分页查询数据库表中的数据,MySql数据库提供分页的函数有limit m,n,但是该函数的用法和我们的需求不一样,所以就需要根据实际情况去改写适合自己的分页语句。

例.查询第1条到第10条的数据的sql是:

select * from table limit 0,10;

对应我们的需求就是查询第一页的数据:

select * from table limit (1-1)*10,10;

从上面的分析我们可以得出分页sql的格式是:

select * from table limit (start-1)*limit,limit;

其中start是页码,limit是每页显示的条数。

建立主键或者唯一索引

在数据量较小的时候使用 limit 进行数据分页在性能上面不会有明显的缓慢,但是当数据量达到了万级或百万级时,sql语句的性能将会影响数据的返回。这是就要使用主键或者是唯一索引来代替limit进行数据分页

例:返回10到50之间的数据

设主键或唯一索引为demo_id 

select * from table where demo_id > (pageNo-1)*pageSize limit pageSize;

基于数据再排序

当需要返回的信息要按顺序或者逆序时,就需要对上面的数据进行排序。可用order by ASC表示顺序,order byDESC表示逆序,一般情况下默认的为顺序

例:返回的数据依照demo_id的顺序进行排列

select * from table where demo_id > (pageNo-1)*pageSize order by demo_id limit pageSize;

总结:以上就是本篇文章的全部内容了,希望对大家有所帮助

bf6e05fe6bb08ded4dd168f1e60fb8ff.gif

-END-

声明:本文选自「 php中文网 」,搜索「 phpcnnew 」即可关注!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL 5.7 不支持递归查询,但是你可以使用其他方法来实现递归查询的效果。一种常用的方法是使用存储过程或函数来模拟递归查询。下面是一个简单的示例,演示如何使用存储过程来实现递归查询: 首先,创建一个存储过程来模拟递归查询: ```sql DELIMITER $$ CREATE PROCEDURE recursive_query(IN initial_id INT) BEGIN DECLARE current_id INT; DECLARE done INT DEFAULT FALSE; DECLARE temp_table TABLE ( id INT, parent_id INT, name VARCHAR(255) ); -- 创建临时表存储查询结果 INSERT INTO temp_table (id, parent_id, name) SELECT id, parent_id, name FROM your_table WHERE id = initial_id; -- 循环查询父级,直到没有父级为止 REPEAT -- 获取当前查询结果的最后一行 SELECT id INTO current_id FROM temp_table ORDER BY id DESC LIMIT 1; -- 查询当前行的父级 INSERT INTO temp_table (id, parent_id, name) SELECT id, parent_id, name FROM your_table WHERE id = (SELECT parent_id FROM temp_table WHERE id = current_id); -- 如果没有父级,结束循环 IF ROW_COUNT() = 0 THEN SET done = TRUE; END IF; UNTIL done END REPEAT; -- 返回查询结果 SELECT * FROM temp_table; -- 删除临时表 DROP TABLE temp_table; END $$ DELIMITER ; ``` 然后,调用存储过程进行递归查询: ```sql CALL recursive_query(1); ``` 这里的 `1` 是初始的查询 ID,你可以根据你的需求修改它。这个存储过程会返回从指定 ID 开始的所有父级行。 请注意,这只是一种模拟递归查询的方法,实际上并不是真正的递归查询。如果需要进行复杂的递归操作,可能需要考虑使用其他数据库管理系统或者编程语言来实现

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值