2014-06-18 70 views
0

我有一個問題,我真的不明白。 查詢SELECT COUNT meorders with ORDER BY

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撥弄着同樣的問題,但只有一個表:

http://sqlfiddle.com/#!2/c8f124/2

+0

如果刪除限制,該怎麼辦?另外,你可以分享表格結構和一些樣本數據嗎?你應該在這裏創建一個小提琴:http://sqlfiddle.com/ –

+1

聚合函數與Group By子句一起工作。 –

+0

@MatteoTassinari增加了sqlfiddle來提問,但在這裏:http://sqlfiddle.com/#!2/c8f124/2 – Williamsson

回答

3

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; 
+0

工程就像一個魅力,謝謝! – Williamsson