DISTINCT的问题!

Ric*_*nop 2 mysql sql

这是我的查询:

SELECT 
DISTINCT `c`.`user_id`,
`c`.`created_at`,
`c`.`body`,
(SELECT COUNT(*) FROM profiles_comments c2 WHERE c2.user_id = c.user_id AND c2.profile_id = 1) AS `comments_count`,
`u`.`username`,
`u`.`avatar_path` 
FROM `profiles_comments` AS `c` INNER JOIN `users` AS `u` ON u.id = c.user_id 
WHERE (c.profile_id = 1) ORDER BY `u`.`id` DESC;
Run Code Online (Sandbox Code Playgroud)

有用.但问题在于DISTINCT字.据我了解,它应该每个c.user_id只选择一行.

但我得到的甚至是4-5行,具有相同的c.user_id列.问题出在哪儿?

Mat*_*att 9

实际上,DISTINCT并不局限于1列,基本上当你说:

SELECT DISTINCT a,b

你所说的是,"给我一个明显的a和b组合值"......就像一个多列的UNIQUE索引


Mat*_*ock 6

distinct将确保select子句中的所有值都是唯一的,而不仅仅是user_id.如果要将结果限制为单个user_id,则应按user_id分组.

也许你想要的是:

SELECT 
`c`.`user_id`,
`u`.`username`,
`u`.`avatar_path`,
(SELECT COUNT(*) FROM profiles_comments c2 WHERE c2.user_id = c.user_id AND c2.profile_id = 1) AS `comments_count` 
FROM `profiles_comments` AS `c` INNER JOIN `users` AS `u` ON u.id = c.user_id 
WHERE (c.profile_id = 1) 
GROUP BY `c`.`user_id`,
`u`.`username`,
`u`.`avatar_path`
ORDER BY `u`.`id` DESC;
Run Code Online (Sandbox Code Playgroud)