Mysql如何分页呢

合集下载

MySQL之分页limit和排序orderby

MySQL之分页limit和排序orderby

MySQL之分页limit和排序orderby 在项⽬中经常⽤到排序和分页,mysql中这两个关键词在查询的时候,也经常⽤到,现场来玩⼀下先试试Order by: 故名思意,order by的意思就是排序,那么就要配合ASC和DESC来使⽤,ASC是升序,DESC是降序同样还是成绩表,查出成绩,使⽤降序排列select res.studentresult from result res order by res.studentresult DESC;格式为:select 字段 from 表名 where 条件 order by 排序的字段 ASC/DESC;select res.studentresult from result res where res.studentresult>80 order by res.studentresult DESC;加⼀个条件,查询⼤于80的学⽣的成绩,使⽤降序这个是⽤升序好,接下来使⽤⼀些limit进⾏分页,显⽰前⾯五条,0开始select res.studentresult from result res order by res.studentresult DESC LIMIT 0,5;格式:select 字段 from 表名 where 条件 order by 排序的字段 ASC/DESC limit 从第⼏条开始,⼀共显⽰⼏条;这⾥,我们试⼀下换成从第⼀条开始,⼀页显⽰6条很简单。

所以可以看出规律,可以⽤来分页时候使⽤假设,⼀页显⽰5条,pagesize总数量/pagesize得出总页数当前页为N开始那么(N-1)*pagesize,就得出当前页起始的条数举例:第⼀页的时候:(1-1)*5=0select res.studentresult from result res order by res.studentresult DESC LIMIT 0,5;第⼆页的时候:N=2(2-1)*5=5;select res.studentresult from result res order by res.studentresult DESC LIMIT 5,5;如此,实现了分页。

如何在MySQL中实现数据分页与排序

如何在MySQL中实现数据分页与排序

如何在MySQL中实现数据分页与排序在现代数据库应用中,数据分页和排序是非常常见且重要的功能。

无论是在网页应用中的数据展示,还是在后台管理系统中的数据查看,都需要对数据进行分页和排序操作。

而MySQL作为一种常用的关系型数据库管理系统,提供了丰富的功能来满足这些需求。

本文将详细讨论如何在MySQL中实现数据分页与排序的方法和技巧。

一、数据分页1. 使用LIMIT和OFFSET实现简单分页在MySQL中,可以使用LIMIT和OFFSET关键字来实现简单的数据分页。

LIMIT用于指定每页显示的记录数,OFFSET用于指定从第几条记录开始显示。

例如,要获取第1页的10条记录,可以使用以下SQL语句:SELECT * FROM table_name LIMIT 10 OFFSET 0;其中table_name是要查询的表名,0表示第一页。

假设要获取第2页的数据,只需将OFFSET的值设置为10:SELECT * FROM table_name LIMIT 10 OFFSET 10;这样就可以获取第2页的数据了。

2. 使用LIMIT和OFFSET实现动态分页除了上述静态分页的方式,我们还经常需要实现动态分页的功能,即根据用户的需求进行灵活的分页操作。

在这种情况下,可以使用变量来动态计算LIMIT和OFFSET的值。

以下是一个示例:SET @pageNumber = 2;SET @pageSize = 10;SET @offset = (@pageNumber - 1) * @pageSize;SELECT * FROM table_name LIMIT @pageSize OFFSET @offset;在这个示例中,我们首先设置了页码、每页显示的记录数和偏移量的变量。

然后,通过计算偏移量和LIMIT的值,就可以获取对应页码的数据了。

3. 使用ROW_NUMBER函数实现高级分页在MySQL 8.0及以上版本中,可以使用ROW_NUMBER函数来实现更高级的分页功能。

MySQL中的数据分页技巧

MySQL中的数据分页技巧

MySQL中的数据分页技巧MySQL是一种广泛使用的开源关系型数据库管理系统,被许多企业和开发者用于存储和管理海量的数据。

在实际应用中,常常会遇到需要进行数据分页处理的情况,以便在前端展示数据时提供更好的用户体验。

本文将介绍MySQL中的数据分页技巧,包括基本的分页查询语句、优化分页查询的方法以及处理大数据分页的策略。

一、基本的分页查询语句在MySQL中进行数据分页通常使用LIMIT关键字来实现。

LIMIT语句允许对查询结果的行数进行限制,在分页查询中可以配合OFFSET关键字一起使用,来指定查询的起始位置。

例如,下面的查询语句可用于获取第一页的10条数据:```SELECT * FROM table_name LIMIT 10 OFFSET 0;```其中,table_name是需要查询的表名,LIMIT 10表示返回10条数据,而OFFSET 0表示从第0条数据开始查询,即第一页。

对于其他页的查询,只需要将OFFSET的值设置为相应的偏移量即可。

假设需要查询第2页的数据,每页显示10条,可以使用如下查询语句:```SELECT * FROM table_name LIMIT 10 OFFSET 10;```这样可以获取第11条到第20条数据。

二、优化分页查询的方法尽管使用LIMIT和OFFSET可以实现数据分页,但在处理大数据量时,可能会遇到性能问题。

因为每次查询都需要扫描整个结果集,并且返回指定的行数,这对于大型表来说开销较大。

为了优化分页查询,可以考虑以下几种方法:1. 使用索引:在需要进行分页查询的列上创建索引,可以加快数据的检索速度。

特别是针对经常进行分页查询的列,如创建时间、更新时间等。

2. 限制查询字段:只返回需要显示的字段,而不是查询全部字段。

这样可以减少网络传输的数据量,提高查询效率。

3. 缓存查询结果:如果分页查询的数据不经常变化,可以将查询结果缓存起来,下次查询时可以直接使用缓存的结果。

mysql 分页底层原理

mysql 分页底层原理

mysql 分页底层原理
MySQL 分页底层原理主要通过查询语句中的 LIMIT 子句来实现。

当执行 SELECT 查询语句时,MySQL 会首先根据 WHERE 子句进行过滤,并获取所有符合条件的数据。

然后,MySQL 会根据 ORDER BY 子句对这些数据进行排序。

一旦排序完成,MySQL 就会根据 LIMIT 子句指定的起始位置和数量,从排序后的结果集中取出指定的数据。

具体实现分页的过程如下:
1. 解析查询语句以确定需要查询的数据集合,这通常是通过WHERE 子句来过滤数据集合。

2. 根据查询语句中的 ORDER BY 子句对数据集合进行排序。

排序通常是通过索引来完成的,以提高效率。

3. 通过 LIMIT 子句指定查询的起始位置和数量。

LIMIT 子句的格式为:LIMIT <offset>, <count>,其中 <offset> 表示起始位置,<count> 表示数量。

4. 根据起始位置和数量,从排序后的数据集合中取出指定的数据,并将结果返回给应用程序。

需要注意的是,对于大型表或需要处理大量数据的表,分页查询可能会导致性能问题。

因此,可以通过使用索引、优化查询语句、对数据进行分片或使用缓存等方法来改善分页查询的性能。

使用mysql和redis实现分页优化排序

使用mysql和redis实现分页优化排序

使⽤mysql和redis实现分页优化排序当论坛帖⼦数量⼗分庞⼤时,直接使⽤MySQL limit查询进⾏分页会变得⼗分缓慢,因此我们需要使⽤其他技术辅助进⾏分页处理。

假如我们帖⼦列表和发帖都是⽤Ajax的POST来提交数据的,请⽤PHP,并且结合MySQL和redis的ZSET编写程序,实现以下基本逻辑:1、处理获取帖⼦列表页内容的AJax请求,AJax请求的参数为page(页码),程序需要返回当前页码的所有帖⼦的数据,返回的数据类型是json格式的,请⾃⾏规定具体接⼝数据结构。

2、处理发表帖⼦的Ajax post请求,实现把数据写⼊到MYSQL等操作。

具体需求如下:1、分页是按发帖时间倒序排列,每页50条;2、不允许使⽤开源框架;3、进⾏必要的封装;4、假设Redis和MySQL服务器使⽤localhost,⽤户名及密码均为;5、代码结构良好,PhpDoc注释清晰;分析下需求帖⼦的发帖时间倒序就是帖⼦ID倒序先来个redis操作类<?php/*** redis操作类* author by hu.chen 20191110* Class RedisDemo*/class RedisDemo{private static $instance;private $objRedis;private $redisAddress = '127.0.0.1';private $redisPort = '6379';private $redisPassword = '';private $redisDbName = 16;private $redisPrefix = 'JJMS';private $key = 'List';/*** 构造⽅法初始化redis对象* JJWXCRedisDemo constructor.* @param $config*/private function __construct($config){if (!empty($config['redisAddress'])){$this->redisAddress = $config['redisAddress'];}if (!empty($config['redisPassword'])){$this->redisPassword = $config['redisPassword'];}if (!empty($config['redisPort'])){$this->redisPort = $config['redisPort'];}if (!empty($config['redisDbName'])){$this->redisDbName = $config['redisDbName'];}if (!empty($config['redisPrefix'])){$this->redisPrefix = $config['redisPrefix'];}$this->objRedis = new Redis();//链接redistry{$connect = $this->objRedis->connect($this->redisAddress,$this->redisPort,30);}catch (Exception $e) {echo $e->getMessage();exit;}//认证密码try{$auth = $this->objRedis->auth($this->redisPassword);}catch (Exception $e) {echo $e->getMessage();exit;}//选择数据库$this->objRedis->select($this->redisDbName);}/*** 单例* @param $config* @return JJWXCRedisDemo*/public static function getInstance($config){if(self::$instance == NULL){self::$instance = new self($config);}return self::$instance;}/*** 添加hash数据* @param $id* @param $info*/public function setHash($id,array $info){if (!is_numeric($id) || !is_array($info) || empty($info)){return false;}$redisHashKey = $this->redisPrefix.'_'.$id;$this->objRedis->hMSet($redisHashKey,$info);}/*** 获取hash数据* @param $keys* @return array*/public function getHash($keys){$res = array();if (is_string($keys)){$res = $this->objRedis->hGetAll($this->redisPrefix.'_'.$keys);}if (is_array($keys)){foreach ($keys as $v){$res[$v] = $this->objRedis->hGetAll($this->redisPrefix.'_'.$v);}}return $res;}/*** 向某个有序集合添加数据* @param $score* @param $value* @param $key* @return bool*/public function setZSet($score,$value,$key){if (empty($score) || empty($value)){return false;}if (!empty($key)){$this->key = $key;}$this->objRedis->zAdd($this->redisPrefix.$this->key,array(),$score,$score); }/*** 获取有序集合长度* @param $key* @return int*/public function getZSetTotal($key){if (!empty($key)){$this->key = $key;}$name = $this->redisPrefix.$this->key;$total = $this->objRedis->zCard($name);return $total;}/*** 获取有序集合数据* @param $key* @param $offset* @param $end*/public function getZSetList($key,$offset,$end){if (!empty($key)){$this->key = $key;}$name = $this->redisPrefix.$this->key;$list = $this->objRedis->zRange($name,$offset,$end);return $list;}}再来个数据库简单的操作类<?php/*** mysql操作类* author by hu.chen 20191221* Class MysqlDemo*/class MysqlDemo{private static $instance = NULL;private $objMysql;private $charset = "utf8";private $username = "";private $password = "www. ";private $port = 3306;private $database = 'test';private $host = '127.0.0.1';private $table = 'board';private $sql;/*** 构造⽅法初始化mysql对象* JJWXCMysqlDemo constructor.* @param $config*/private function __construct($config){if (!empty($config['host'])){$this->host = $config['host'];}if (!empty($config['username'])){$this->username = $config['username'];}if (!empty($config['password'])){$this->password = $config['password'];}if (!empty($config['port'])){$this->port = $config['port'];}if (!empty($config['charset'])){$this->charset = $config['charset'];}if (!empty($config['database'])){$this->database = $config['database'];}$this->objMysql = new mysqli($this->host,$this->username,$this->password,$this->database,$this->port); if($this->objMysql->connect_error){die("连接失败: " . mysqli_connect_error());}mysqli_set_charset($this->objMysql,"utf8");}/*** 单例模式* @param $config* @return JJWXCMysqlDemo|null*/public static function getInstance($config){if(self::$instance == NULL){self::$instance = new self($config);}return self::$instance;}/*** 添加数据* @param $data* @return bool|int|string 成功返回id*/public function add(array $data){if(!is_array($data)){return false;}$fieldStr = '';$valueStr = '';foreach($data as $key =>$value){if(isset($value)){$fieldStr .= "`".addslashes($key)."`,";$valueStr .= "'".addslashes($value)."',";}}$fieldStr = rtrim($fieldStr,",");$valueStr = rtrim($valueStr,",");$this->sql = "INSERT INTO {$this->table} ({$fieldStr}) VALUES({$valueStr})"; if($this->objMysql->query($this->sql)){return mysqli_insert_id($this->objMysql);}else{return mysqli_errno($this->objMysql);}}/*** 更新数据* @param $data* @param $where //条件* @return bool|int 成功返回收影响⾏数*/public function update($data,$where){if(!is_array($data)){return false;}$field = "";foreach($data as $k=>$v){$field .= "`".addslashes($k)."`='".addslashes($v)."',";}$field = rtrim($field,",");$this->sql = "UPDATE {$this->table} SET {$field}";if(!empty($where)){$this->sql .= " WHERE ".$where;}if($this->objMysql->query($this->sql)){return mysqli_affected_rows($this->objMysql);}else{return mysqli_errno($this->objMysql);}}/*** 删除数据* @param $where //条件* @return bool|int 成功返回收影响⾏数*/public function del($where){if(empty($where)){return false;}$this->sql = "DELETE FROM {$this->table} WHERE ".$where;if($this->query()){return mysqli_affected_rows($this->link);}else{return mysqli_errno($this->objMysql);}}}下⾯是操作类可以理解为控制器吧<?phprequire_once "mst1.php";require_once "JJWXCRedisDemo.php";require_once "JJWXCMysqlDemo.php";require_once "Tools.php";/*** author by hu.chen 20191221* Class Index*/class Index{/*** 新增帖⼦*/public function addBBS(){//判断变量是否为空if (!$_POST){self::echoExit([],'错误请求⽅式',false);}if (empty($_POST['subject'])){self::echoExit([],'题⽬不可为空',false);}if (empty($_POST['body'])){self::echoExit([],'主体',false);}if (empty($_POST['author'])){self::echoExit([],'发帖⼈',false);}//数据组装$info = array('subject'=>$_POST['subject'],'author'=>$_POST['author'],'ldate'=>date('Y-m-d H:i:s',time()),'replies'=>0,'ndate'=>date('Y-m-d H:i:s',time()),'ip'=>getIp());//数据⼊mysql$addMysqlId = JJWXCMysqlDemo::getInstance([])->add($info);if (!$addMysqlId){self::echoExit([],'发帖失败',false);}//插⼊数据库成功后向redis插⼊相同数据JJWXCRedisDemo::getInstance([])->setHash($addMysqlId,$info);JJWXCRedisDemo::getInstance([])->setZSet($addMysqlId,$addMysqlId,'');self::echoExit([],'发帖成功',true);}/*** 获取列表数据* @return array*/public function getList(){$page = !empty($_REQUEST['page'])?$_REQUEST['page']:1;//页数$size = !empty($_REQUEST['size'])?$_REQUEST['size']:50;//每页数据量//区间$offset = ($page-1) * $size;$end = ($offset + $size) - 1;$total = JJWXCRedisDemo::getInstance([])->getZSetTotal('List'); //数据总量$allPage = ceil($total/$size); //总页码$tmpList = JJWXCRedisDemo::getInstance([])->getZSetList('List',$offset,$end); $list = array();if (!empty($tmpList)){foreach ($tmpList as $v){$list[$v] = JJWXCRedisDemo::getInstance([])->getHash($v);}}//数据组装$res = array('listInfo' => $list,'pageInfo' => array('allPage' => $allPage,'total'=>$total,'page'=>$page,'size'=>$size));return $res;}/*** 返回json数据* @param array $data* @param string $msg* @param bool $status*/public function echoExit($data = array(),$msg = "",$status = true){$returnParam = ['code' => $status?200:500,'error_msg' => $msg,'data' => $data,];$res = json_encode($returnParam);header("Content-type:application/json;charset=utf-8");die($res);}}>最后加上⼀个Tools⽂件⾥⾯放公⽤⽅法了/*** 打印函数* author by hu.chen* @param $t* @param bool $i*/function hc_echo_end($t,$i=false){static $si=0;if($si==0) {echo"<pre>\r\n";}else{echo"\r\n";}if(!$i){print_r($t);exit;}print_r($t);$si++;if($i!==true&&$si>=$i){exit;}}/*** 获取ip函数从⽹上抄的* @return mixed|string*/function getIp(){if ($_SERVER["HTTP_CLIENT_IP"] && strcasecmp($_SERVER["HTTP_CLIENT_IP"], "unknown")) {$ip = $_SERVER["HTTP_CLIENT_IP"];} else {if ($_SERVER["HTTP_X_FORWARDED_FOR"] && strcasecmp($_SERVER["HTTP_X_FORWARDED_FOR"], "unknown")) {$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];}else{if ($_SERVER["REMOTE_ADDR"] && strcasecmp($_SERVER["REMOTE_ADDR"], "unknown")) {$ip = $_SERVER["REMOTE_ADDR"];}else {if(isset ($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) { $ip = $_SERVER['REMOTE_ADDR'];}else{$ip = "unknown";}}}}return $ip;}以上就实现了redis的zset与mysql 实现分页操作。

Mysql如何实现多张无关联表查询数据并分页

Mysql如何实现多张无关联表查询数据并分页

Mysql如何实现多张⽆关联表查询数据并分页Mysql 多张⽆关联表查询数据并分页功能需求在三张没有主外键关联的表中取出⾃⼰想要的数据,并且分页。

数据库表结构⽔果表:坚果表:饮料表:数据库随便建的,重在⽅法。

主要使⽤UNION ALL 操作符UNION ALL 操作符⽤于合并两个或多个 SELECT 语句的结果集。

请注意,UNION ALL内部的 SELECT 语句必须拥有相同数量的列。

列也必须拥有相似的数据类型。

同时,每条 SELECT 语句中的列的顺序必须相同 ; 另外,UNION ALL结果集中的列名总是等于 UNION ALL中第⼀个 SELECT 语句中的列名。

// 详细sql语句select * FROM((select fid,fname,price,type from fruits)UNION ALL(select nid,name,price,6 as type from nut)UNION ALL(select did,dname,price,7 as type from drinks)) as fnd limit 0,10 -----fnd为表的别名最终结果mysql多表联合查询时出现的分页问题的解决mysql⼀对多分页问题部门表:tbl_dept员⼯表:tbl_emp数据库sql⽂件CREATE DATABASE /*!32312 IF NOT EXISTS*/`ssm-crud` /*!40100 DEFAULT CHARACTER SET utf8 */; USE `ssm-crud`;/*Table structure for table `tbl_dept` */DROP TABLE IF EXISTS `tbl_dept`;CREATE TABLE `tbl_dept` (`dept_id` int(11) NOT NULL AUTO_INCREMENT,`dept_name` varchar(255) DEFAULT NULL,PRIMARY KEY (`dept_id`)) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;/*Data for the table `tbl_dept` */insert into `tbl_dept`(`dept_id`,`dept_name`) values(1,'技术部'),(2,'业务部'),(6,'销售部'),(7,'⼈事部');/*Table structure for table `tbl_emp` */DROP TABLE IF EXISTS `tbl_emp`;CREATE TABLE `tbl_emp` (`emp_id` int(11) NOT NULL AUTO_INCREMENT,`emp_name` varchar(255) DEFAULT NULL,`emp_gender` char(1) DEFAULT NULL,`emp_email` varchar(255) DEFAULT NULL,`d_id` int(11) DEFAULT NULL,PRIMARY KEY (`emp_id`),KEY `FK_tbl_emp` (`d_id`),CONSTRAINT `FK_tbl_emp` FOREIGN KEY (`d_id`) REFERENCES `tbl_dept` (`dept_id`)) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;/*Data for the table `tbl_emp` */insert into `tbl_emp`(`emp_id`,`emp_name`,`emp_gender`,`emp_email`,`d_id`) values(1,'xiaoshen','2',NULL,6),(4,'晓明','1',NULL,1),(5,'xiaohong','2',NULL,2),(6,'xiaohei','2',NULL,6),(7,'xiaozhang','1',NULL,1),(8,'xiaogao','1',NULL,1),(9,'xiaohua','1',NULL,1),(10,'xiaoyan','2',NULL,1),(11,'xiaohai','2',NULL,2),(12,'xiaoqiang','1',NULL,6),(13,'xiaoqi','2',NULL,7);分页错误写法(主查询员⼯表) SELECT * FROM tbl_emp eLEFT JOINtbl_dept dON d.dept_id = e.d_idLIMIT 1,10使⽤⼦查询⽅式解决问题SELECT*FROM(SELECT*FROMtbl_emp eLEFT JOINtbl_dept dON d.dept_id = e.d_idGROUP BY e.d_idLIMIT 1,10) eLEFT JOIN tbl_dept dON d.dept_id = e.d_id下⾯代码与之⽆关仅为备份SELECTft.id,ft.partner_id AS partnerId,ft.code ,ft.end_update_date AS endUpdateDate, ,ft.type ,ft.area ,ft.is_default AS isDefault,fp.id fpId,fp.shop_id AS fpShopId ,fp.provice_id AS fpProviceId ,fp.provice_name AS fpProviceName , fp.start_num AS fpStartNum ,fp.start_fee AS fpStartFee ,fp.increase_num AS fpIncreaseNum , fp.increase_fee AS fpIncreaseFee ,fp.code AS fpCode ,fp.provice_text AS fpProviceText ,fp.template_id AS fpTemplateIdFROM(SELECTf.id,f.partner_id ,f.code ,f.end_update_date , ,f.type ,f.area ,f.is_default ,f.is_del,f.create_dateFROMbus_freight_template fLEFT JOIN bus_freight_provice pON f.id = p.template_idWHERE f.code = p.codeAND f.code = #[code]GROUP BY f.idLIMIT #{startPage},#{pageSize}) ftLEFT JOIN bus_freight_provice fpON ft.id = fp.template_idWHERE ft.code = fp.codeAND fp.template_id IS NOT NULLAND ft.code = #[code]AND fp.is_del = '0'AND ft.is_del = '0'order by ft.create_date desc以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

mysql使用技巧分页limit

mysql使用技巧分页limit

mysql使⽤技巧分页limitmysql 分页使⽤ limit关键字,limit x,y (x代表从哪条数据开始,y代表页⾯⼤⼩。

mysql第⼀条数据在limit计算时索引为0)limit 10 前10条limit 0,10 从第1条开始的10条limit 10,10 从第11条开始的10条limit 100,10 从第101条开始的10条 数据量⼤时(>千万),效率低oracal 分页,使⽤ oracle的特殊列 rownumselect*from(select*,rownum R from(select*from a)实例:查找⼊职员⼯时间排名倒数第三的员⼯所有信息。

limit 2,1代表选择从第3条数据开始的1条数据,即第3页数据,页⾯⼤⼩为1 select*from employees order by hire_date desc limit 2,1前n条数据,即从索引0开始计算:limit n 或者 limit 0,nmysql>select*from employees order by hire_date desc limit 5;+-------------+------------+-----------+---------+--------------------+------------+----------+---------+----------------+------------+---------------+| employee_id | first_name | last_name | email | phone_number | hire_date | job_id | salary | commission_pct | manager_id | department_id |+-------------+------------+-----------+---------+--------------------+------------+----------+---------+----------------+------------+---------------+|173| Sundita | Kumar | SKUMAR |011.44.1343.329268|2000-04-21| SA_REP |6100.00|0.10|148|80||167| Amit | Banda | ABANDA |011.44.1346.729268|2000-04-21| SA_REP |6200.00|0.10|147|80||166| Sundar | Ande | SANDE |011.44.1346.629268|2000-03-24| SA_REP |6400.00|0.10|147|80||128| Steven | Markle | SMARKLE |650.124.1434|2000-03-08| ST_CLERK |2200.00|NULL|120|50||165| David | Lee | DLEE |011.44.1346.529268|2000-02-23| SA_REP |6800.00|0.10|147|80|+-------------+------------+-----------+---------+--------------------+------------+----------+---------+----------------+------------+---------------+5 rows in set (0.00 sec)mysql>select*from employees order by hire_date desc limit 0,5;+-------------+------------+-----------+---------+--------------------+------------+----------+---------+----------------+------------+---------------+| employee_id | first_name | last_name | email | phone_number | hire_date | job_id | salary | commission_pct | manager_id | department_id |+-------------+------------+-----------+---------+--------------------+------------+----------+---------+----------------+------------+---------------+|173| Sundita | Kumar | SKUMAR |011.44.1343.329268|2000-04-21| SA_REP |6100.00|0.10|148|80||167| Amit | Banda | ABANDA |011.44.1346.729268|2000-04-21| SA_REP |6200.00|0.10|147|80||166| Sundar | Ande | SANDE |011.44.1346.629268|2000-03-24| SA_REP |6400.00|0.10|147|80||128| Steven | Markle | SMARKLE |650.124.1434|2000-03-08| ST_CLERK |2200.00|NULL|120|50||165| David | Lee | DLEE |011.44.1346.529268|2000-02-23| SA_REP |6800.00|0.10|147|80|+-------------+------------+-----------+---------+--------------------+------------+----------+---------+----------------+------------+---------------+5 rows in set (0.00 sec)更多例⼦limit 5 前5条数据limit 2,1 第3页数据,页⾯⼤⼩为1limit 2,2 第2页数据,页⾯⼤⼩为2limit 2,3 第3条数据起,共3条数据,此数据不符合分页数据显⽰格式分页显⽰格式:limit startIndex pageSizestartIndex = (需要查询的页码数 - 1) * pageSizemysql>select*from employees order by hire_date desc limit 5;+-------------+------------+-----------+---------+--------------------+------------+----------+---------+----------------+------------+---------------+| employee_id | first_name | last_name | email | phone_number | hire_date | job_id | salary | commission_pct | manager_id | department_id |+-------------+------------+-----------+---------+--------------------+------------+----------+---------+----------------+------------+---------------+|173| Sundita | Kumar | SKUMAR |011.44.1343.329268|2000-04-21| SA_REP |6100.00|0.10|148|80||167| Amit | Banda | ABANDA |011.44.1346.729268|2000-04-21| SA_REP |6200.00|0.10|147|80||166| Sundar | Ande | SANDE |011.44.1346.629268|2000-03-24| SA_REP |6400.00|0.10|147|80||128| Steven | Markle | SMARKLE |650.124.1434|2000-03-08| ST_CLERK |2200.00|NULL|120|50||165| David | Lee | DLEE |011.44.1346.529268|2000-02-23| SA_REP |6800.00|0.10|147|80|+-------------+------------+-----------+---------+--------------------+------------+----------+---------+----------------+------------+---------------+5 rows in set (0.00 sec)mysql>select*from employees order by hire_date desc limit 2,1;+-------------+------------+-----------+-------+--------------------+------------+--------+---------+----------------+------------+---------------+| employee_id | first_name | last_name | email | phone_number | hire_date | job_id | salary | commission_pct | manager_id | department_id |+-------------+------------+-----------+-------+--------------------+------------+--------+---------+----------------+------------+---------------+|166| Sundar | Ande | SANDE |011.44.1346.629268|2000-03-24| SA_REP |6400.00|0.10|147|80|+-------------+------------+-----------+-------+--------------------+------------+--------+---------+----------------+------------+---------------+1 row in set (0.00 sec)mysql>select*from employees order by hire_date desc limit 2,2;+-------------+------------+-----------+---------+--------------------+------------+----------+---------+----------------+------------+---------------+| employee_id | first_name | last_name | email | phone_number | hire_date | job_id | salary | commission_pct | manager_id | department_id | +-------------+------------+-----------+---------+--------------------+------------+----------+---------+----------------+------------+---------------+|166| Sundar | Ande | SANDE |011.44.1346.629268|2000-03-24| SA_REP |6400.00|0.10|147|80||128| Steven | Markle | SMARKLE |650.124.1434|2000-03-08| ST_CLERK |2200.00|NULL|120|50|+-------------+------------+-----------+---------+--------------------+------------+----------+---------+----------------+------------+---------------+2 rows in set (0.00 sec)mysql>select*from employees order by hire_date desc limit 2,3;+-------------+------------+-----------+---------+--------------------+------------+----------+---------+----------------+------------+---------------+| employee_id | first_name | last_name | email | phone_number | hire_date | job_id | salary | commission_pct | manager_id | department_id | +-------------+------------+-----------+---------+--------------------+------------+----------+---------+----------------+------------+---------------+|166| Sundar | Ande | SANDE |011.44.1346.629268|2000-03-24| SA_REP |6400.00|0.10|147|80||128| Steven | Markle | SMARKLE |650.124.1434|2000-03-08| ST_CLERK |2200.00|NULL|120|50||165| David | Lee | DLEE |011.44.1346.529268|2000-02-23| SA_REP |6800.00|0.10|147|80|+-------------+------------+-----------+---------+--------------------+------------+----------+---------+----------------+------------+---------------+3 rows in set (0.00 sec)。

MySql分页sql语句

MySql分页sql语句

MySql分页sql语句如果和MSSQL的TOP语法相比,那么MySQL的LIMIT语法要显得优雅了许多。

使用它来分页是再自然不过的事情了。

最基本的分页方式:SELECT ... FROM ... WHERE ... ORDER BY ... LIMIT ...在中小数据量的情况下,这样的SQL足够用了,唯一需要注意的问题就是确保使用了索引:举例来说,如果实际SQL类似下面语句,那么在category_id, id两列上建立复合索引比较好:SELECT * FROM articles WHERE category_id = 123 ORDER BY id LIMIT 50, 10子查询的分页方式:随着数据量的增加,页数会越来越多,查看后几页的SQL就可能类似:SELECT * FROM articles WHERE category_id = 123 ORDER BY id LIMIT 10000, 10一言以蔽之,就是越往后分页,LIMIT语句的偏移量就会越大,速度也会明显变慢。

此时,我们可以通过子查询的方式来提高分页效率,大致如下:1,2,3,4,5,6,7,8,9,1011,12,13,14,15,16,17,18,19,2021,22,23,24,25,26,27,28,29,301001,1002.。

10001,10002。

SELECT * FROM articles WHERE id >= (SELECT id FROM articles ORDER BY id LIMIT 10, 1) LIMIT 10JOIN分页方式SELECT * FROM `content` AS t1JOIN (SELECT id FROM `content` ORDER BY id desc LIMIT ".($page-1)*$pagesize.", 1)AS t2 WHERE t1.id <= t2.id ORDER BY t1.id desc LIMIT $pagesize;经过我的测试,join分页和子查询分页的效率基本在一个等级上,消耗的时间也基本一致。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Mysql如何分页呢
大家知道Mysql如何分页吗?下面我们就给大家详细介绍一下吧!通常针对MySQL大数据量的查询采取“分页”策略,但是如果翻页到比较靠后的位
置时查询将变得很慢,因为mysql将花费大量的时间来扫描需要丢弃的数据。

 基本分页技巧
 通常情况下,为了实现高效分页,需要在查询中WHERE条件列和排序列应用组合索引。

 例如,建立索引(a,b,c)使得以下查询可以使用索引,提高查询效率:
 1、字段排序
 ORDER BY a ORDER BY a,bORDER BY a, b, c ORDER BY a DESC, b DESC, c DESC
 2、筛选和排序
 WHERE a = const ORDER BY b, c WHERE a = const AND b = const ORDER BY c WHERE
 a = const ORDER BY b, c WHERE a = const AND b >; const ORDER BY b, c 3、下面查询是无法使用以上索引的
 ORDER BY a ASC, b DESC, c DESC//排序方向不一致WHERE g = const ORDER BY b, c //
 字段g不是索引一部分WHERE a = const ORDER BY c //没有使用字段b WHERE a = const ORDER BY a, d //
 字段d不是索引的一部分
 解决大数据量翻页问题。

相关文档
最新文档