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

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 为什么我的mysql DISTINCT不起作用?脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
为什么下面的两个查询返回重复的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的几倍.

脚本宝典总结

以上是脚本宝典为你收集整理的php – 为什么我的mysql DISTINCT不起作用?全部内容,希望文章能够帮你解决php – 为什么我的mysql DISTINCT不起作用?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。