Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mysql DISTINCT()无法按预期工作_Mysql_Database - Fatal编程技术网

mysql DISTINCT()无法按预期工作

mysql DISTINCT()无法按预期工作,mysql,database,Mysql,Database,我想获得按评论数排序的帖子列表,我已经成功运行了以下查询,但它给出了重复值,即帖子重复,我想按评论数排序,当我在整个查询中放置DISTINCT()时,会出现一个错误: #1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,了解使用第1行“UNIQUE”(post.pname,post.pid FROM post,COMMENT WHERE post.pid=COMMENT.pid ORD)的正确语法 查询不带DISTINCT()(可以工作,但当然不会给出唯一的值) 使用DI

我想获得按评论数排序的帖子列表,我已经成功运行了以下查询,但它给出了重复值,即帖子重复,我想按评论数排序,当我在整个查询中放置DISTINCT()时,会出现一个错误: #1064-您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,了解使用第1行“UNIQUE”(post.pname,post.pid FROM post,COMMENT WHERE post.pid=COMMENT.pid ORD)的正确语法

查询不带DISTINCT()(可以工作,但当然不会给出唯一的值)

使用DISTINCT()查询(不起作用)


应使用不同的,因此:

SELECT DISTINCT a,b,c FROM t;
没有分组依据。它将查找表中的所有(a、b、c),然后对它们进行重复数据消除

这是坏的:

SELECT id, a, b FROM t GROUP BY id;
这是因为它将找到id的所有不同值,但提供随机值
a
b

要了解每个
foo
有多少个,此模式非常有效:

SELECT foo, COUNT(*) FROM t GROUP BY foo;
不要在
不同的
之后使用()


由于我不明白您在寻找什么,我可能没有提供足够的信息来修复您的查询。如果我失败了,请提供一些示例数据和所需的输出;有时反向工程是最简单的解决方法。

您的意思是“独特”而不是“独特”?独特是指添加约束,而distinct用于选择唯一的行。您是否尝试查看任何教程、文档…?您的语法错误。DISTINCT的工作原理与预期一样,您只需仔细编写查询…哦,不!这些年来我一直在使用DISTINCT,直到现在我才发现它不起作用…请阅读以获取DISTINCT的语法…它用于您要选择的列列表,而不是整个查询语句;并且它不是一个函数,因此不要将其括起来,因为它不一定“正确”工作。由于GROUP BY没有列出所有字段,因此代码可以自由地为p.id以外的内容选择随机值。
SELECT post.pname, post.pid
FROM post
    Inner Join ( Select 
                       comment.pid
                     , COUNT(*) As Cant
                 From COMMENT
                 Group By 
                       comment.pid
               ) As x
        On post.pid = x.pid
ORDER BY x.Cant
SELECT DISTINCT a,b,c FROM t;
SELECT id, a, b FROM t GROUP BY id;
SELECT foo, COUNT(*) FROM t GROUP BY foo;
SELECT post.pname, post.pid
FROM post
    Inner Join ( Select 
                       comment.pid
                     , COUNT(*) As Cant
                 From COMMENT
                 Group By 
                       comment.pid
               ) As x
        On post.pid = x.pid
ORDER BY x.Cant