网站地图    收藏   

主页 > 后端 > php资料库 >

MySQL实现取出表中排序数据且不重复_自学php网

来源:自学PHP网    时间:2014-12-04 22:12 作者: 阅读:

[导读] 今日做一个功能需求,从表中排序取出前十个且数据不一致的数据,如下列a表中的值有以下数据: mysql select * from a;+----+----------+| id | user |+----+----------+| 1 | zhangsan || 2 | lisi || 3 | wangwu...

今日做一个功能需求,从表中排序取出前十个且数据不一致的数据,如下列a表中的值有以下数据:

 

mysql> select * from a;
+----+----------+
| id | user     |
+----+----------+
|  1 | zhangsan |
|  2 | lisi     |
|  3 | wangwu   |
|  4 | zhangsan |
|  5 | zhaosi   |
|  6 | wangwu   |
|  7 | lisi     |
|  8 | lisi     |
|  9 | zhaosi   |
+----+----------+
9 rows in set (0.00 sec)

我们需要取出id最大的前四位,且user不能一致的信息,按照以上信息以及需求,我们要搜索出结果为

zhaosi

lisi

wangwu

zhangsan 

不能按照普通的做法,如:

mysql> select * from a order by id desc limit 4;
+----+--------+
| id | user   |
+----+--------+
|  9 | zhaosi |
|  8 | lisi   |
|  7 | lisi   |
|  6 | wangwu |
+----+--------+
4 rows in set (0.00 sec)

这样搜索出来的有重复值,得使用distinct关键字

mysql> select distinct user from a order by id desc limit 4; 
+----------+
| user     |
+----------+
| zhaosi   |
| wangwu   |
| lisi     |
| zhangsan |
+----------+
4 rows in set (0.00 sec)

其实应该是lisi与wangwu互换一下才是比较理想的,因为lisi最大的ID是8,而wangwu最大的ID是6,可能是lisi有一个ID为2导致的,我们把ID为2的删除,在来试试

mysql> delete from a where id=2;
Query OK, 1 row affected (0.02 sec)

mysql> select * from a;
+----+----------+
| id | user     |
+----+----------+
|  1 | zhangsan |
|  3 | wangwu   |
|  4 | zhangsan |
|  5 | zhaosi   |
|  6 | wangwu   |
|  7 | lisi     |
|  8 | lisi     |
|  9 | zhaosi   |
+----+----------+
8 rows in set (0.00 sec)

mysql> select distinct user from a order by id desc limit 4; 
+----------+
| user     |
+----------+
| lisi     |
| zhaosi   |
| wangwu   |
| zhangsan |
+----------+
4 rows in set (0.00 sec)

结果正是由于前边有较低的ID记录影响了排序。

虽然这条语句能搜索正确的效果,但可能排序不是那么理想,也就是ID最大的前四位能搜索出来,但在这四位数据里并不是按照ID大小排序的。

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论