加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 为什么我的mysql DISTINCT不起作用?

发布时间:2020-12-13 22:18:32 所属栏目:PHP教程 来源:网络整理
导读:为什么下面的两个查询返回重复的member_id而不是第三个? 我需要第二个查询才能使用distinct.无论何时我运行GROUP BY,此查询都非常慢,并且结果集不会返回与distinct相同的值(值是错误的). SELECT member_id,id FROM ( SELECT * FROM table1 ORDER BY created
为什么下面的两个查询返回重复的member_id而不是第三个?

我需要第二个查询才能使用distinct.无论何时我运行GROUP BY,此查询都非常慢,并且结果集不会返回与distinct相同的值(值是错误的).

SELECT member_id,id 
FROM ( SELECT * FROM table1 ORDER BY created_at desc ) as u 
LIMIT 5

+-----------+--------+
| member_id | id     |
+-----------+--------+
|     11333 | 313095 |
|    141831 | 313094 |
|    141831 | 313093 |
|     12013 | 313092 |
|     60821 | 313091 |
+-----------+--------+
SELECT distinct member_id,id 
FROM ( SELECT * FROM table1 ORDER BY created_at desc ) as u 
LIMIT 5

+-----------+--------+
| member_id | id     |
+-----------+--------+
|     11333 | 313095 |
|    141831 | 313094 |
|    141831 | 313093 |
|     12013 | 313092 |
|     60821 | 313091 |
+-----------+--------+
SELECT distinct member_id
    FROM ( SELECT * FROM table1 ORDER BY created_at desc ) as u 
    LIMIT 5

+-----------+
| member_id |
+-----------+
|     11333 |
|    141831 |
|     12013 |
|     60821 |
|     64980 |
+-----------+

我的表样本

CREATE TABLE `table1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,`member_id` int(11) NOT NULL,`s_type_id` int(11) NOT NULL,`created_at` datetime DEFAULT NULL,PRIMARY KEY (`id`),KEY `s_FI_1` (`member_id`),KEY `s_FI_2` (`s_type_id`)
) ENGINE=InnoDB AUTO_INCREMENT=313096 DEFAULT CHARSET=utf8;

解决方法

DISTINCT是一个关键字,只能应用于整个SELECT,而不能应用于单个字段.它确保数据库不返回两个相同的行.这就是为什么你的第二个查询与DISTINCT只返回一次每个member_id,而你的第一个返回它两次.在其结果集中,每行确实是唯一的,即使您可以获得相同member_id的几倍.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读