2014-09-01 56 views
0

我想按最近的活動排序(註釋)。但是,如果語句沒有註釋,則下面的查詢在最後不會顯示該語句。如何更改查詢,以便最後顯示並顯示沒有註釋的語句?如何按其他表中的最新記錄對記錄進行排序

SELECT 
    `statements`.`id`, 
    `statement`, 
    `statements`.`timestamp`, 
    `statements`.`published`, 
    `image`, 
    `statements`.`author_id`, 
    `statements`.`ip_address`, 
    `username`, 
    `comment_count` 
FROM 
    (`statements`) 
    INNER JOIN `comments` 
    ON `comments`.`statement_id` = `statements`.`id` 
    LEFT JOIN `users` 
    ON `users`.`id` = `statements`.`author_id` 
WHERE `statements`.`published` > 0 
GROUP BY `statements`.`id` 
ORDER BY MAX(comments.id) 
+0

的[在SQL中,如何在表內的字段集合]可能重複(http://stackoverflow.com/questions/10412033/in-sql-how-to-aggregate-on-a-field-inside - 表) – Bulat 2014-09-01 21:11:15

回答

3

嘗試LEFT JOINcomments表:

SELECT `statements`.`id`, `statement`, `statements`.`timestamp`, `statements`.`published`, `image`, `statements`.`author_id`, `statements`.`ip_address`, `username`, `comment_count` 
FROM (`statements`) 
    LEFT JOIN `comments` ON `comments`.`statement_id` = `statements`.`id` 
    LEFT JOIN `users` ON `users`.`id` = `statements`.`author_id` 
WHERE `statements`.`published` > 0 
GROUP BY `statements`.`id` 
ORDER BY MAX(comments.id) DESC 

排序方式最大評論ID下降將使聲明與頂部最近的評論。

關於MySQL文檔 Working with NULL Values

在做一個ORDER BY,如果你這樣做 ORDER BY ... ASC NULL值首先提出並最後,如果你做的ORDER BY ... DESC。

沒有評論的聲明(MAX(comments.id) IS NULL)必須放置在結果的底部。

+0

我已經嘗試過。它不起作用。 – user3835276 2014-09-01 20:41:46

+0

@ user3835276,儘量不要使用短語「不起作用」。我們通常認爲它是可能的最不有用的錯誤報告':-)'。考慮這個答案是一個暗示讓你去? – halfer 2014-09-01 20:42:25

+0

@halfer瞭解。 – user3835276 2014-09-01 20:45:12

0

我會做完全略有不同:

SELECT 
    statements.*, 
    cm.id 
FROM 
    statements LEFT JOIN 
    (SELECT statement_id, MAX(id) id FROM comments GROUP BY statement_id) cm 
    ON cm.statement_id = statements.id 
    LEFT JOIN users 
    ON users.id = statements.author_id 
WHERE statements.published > 0 
ORDER BY cm.id; 

這樣,你不砍取決於MySQL的組,該查詢應在任何其他數據庫。

+0

這個查詢不需要MySQL破解。將MAX(comments.id)放在'SELECT'子句中,並且別名爲'max_comment_id'就足夠了,並且可以在大多數數據庫的'ORDER BY'中使用這個別名。 – Nicolai 2014-09-01 21:26:25

+0

然後您需要提及GROUP BY語句中的所有列 – Bulat 2014-09-01 22:02:18

相關問題