我有一个问题我真的不明白。 查询
SELECT
f.*,
ftv.content,
ftv.updated,
COUNT(ftv.file_number) AS versions
FROM
files as f
INNER JOIN
files_text_versions AS ftv
ON
ftv.file_number = f.file_number
WHERE
f.file_number = '%s'
ORDER BY
ftv.updated DESC
LIMIT 1
完全忽略 ORDER BY 语句,但如果我删除
COUNT(ftv.file_number) AS versions
查询运行良好,并按照应有的顺序进行排序。
这是为什么,我该如何解决?
SQL fiddle 有同样的问题但只有一张表:
最佳答案
您的count(*)
将查询转换为聚合查询。如果没有 group by
,它只会返回一行。虽然在其他数据库中你会得到一个错误,但 MySQL 允许这种语法。
您可以通过添加group by
来解决这个问题。但是,ftv
中的其他两列会出现问题。您可以通过巧妙的聚合获得所需的值:
SELECT f.*,
substring_index(group_concat(ftv.content order by ftv.updated desc), ',', 1) as content,
MAX(ftv.updated) as updated,
COUNT(ftv.file_number) AS versions
FROM files f INNER JOIN
files_text_versions AS ftv
ON ftv.file_number = f.file_number
WHERE f.file_number = '%s'
GROUP BY t.file_number
ORDER BY updated DESC
LIMIT 1;
关于mysql - SELECT COUNT 与 ORDER BY 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24285110/