2010-11-18 165 views
0

我有2個表:問題與MySQL查詢

結構如下的問題表:

id 
title 
userid 
date 

和答案表具有以下結構:

id 
idquestion 
userid 
message 
date 

我想說明所有問題以及該問題的最新答案。

例如,如果我們有5個問題,我想獲得這樣的事:

id title message messagedate 
1  qs 1 mess 1 2010-11-18 
2  qs 2 mess 2 2010-11-19 
3  qs 3 mess 3 2010-11-20 
4  qs 4 mess 4 2010-11-21 

我的查詢到目前爲止:

SELECT q.id, qa.id as answerid, title, qa.message 
     FROM `questions` q 
INNER JOIN questions_answers qa 
     ON q.id = qa.idquestion 
    GROUP BY q.id 
    ORDER BY q.id, answerid DESC 

但它不能正常工作,它通過問題ID組(刪除所有其他列消息,只留下第一條消息 - 所以順序是無用的)

任何幫助表示讚賞。謝謝

+0

您可以將某些示例數據發佈到表,準確地告訴你要如何從存儲的數據產生的輸出? (例如,簡單地刪除「GROUP BY」似乎現在可以工作,但我不認爲這就是你最終想要的)... – ircmaxell 2010-11-18 16:14:52

+0

如果我刪除組,我會得到所有的答案。例如,如果我有兩個答案有一個問題,我將有2行顯示該問題,而不是一個。如果我有X個問題,我想在查詢時得到X行,所以只有最新的答案/問題, – FinalDestiny 2010-11-18 16:16:21

回答

2

老問題。這裏的解決方案: http://dev.mysql.com/doc/refman/5.1/en/example-maximum-column-group-row.html

你的情況:

SELECT q.id, qa.id as answerid, title, qa.message 
FROM questions q 
JOIN questions_answers qa ON q.id = qa.idquestion 
LEFT JOIN questions_answers qa2 ON qa.idquestion = qa2.idquestion AND qa.date < qa2.date 
WHERE qa2.idquestion IS NULL 

(我們的想法是在兩個操作分裂問題:一,從問題的答案加入,然後使用從MySQL文章的方法)

+0

我想只用1個查詢,而不是子查詢。 – FinalDestiny 2010-11-18 16:11:12

+0

那麼也許只是使用LEFT JOIN的解決方案!? – AndreKR 2010-11-18 16:14:04

+0

我有兩個不同的表格,不僅僅是這個例子中的一個。所以,我無法弄清楚如何去做。你能幫我查詢一下嗎?謝謝, – FinalDestiny 2010-11-18 16:17:26

0

那麼你可以用不同的方式來處理它。您正在使用內部連接,這意味着無論如何您都不會顯示沒有答案的問題,因此請搜索按問題ID分組的最大答案,並加入問題表以獲取標題。

​​

+0

這對於qa.id來說很好,但qa.message是錯誤的,仍然是第一個。例如,我想查找回復該消息的最後一位用戶,MAX不會在這裏工作, – FinalDestiny 2010-11-18 16:22:38

+0

不會,這會爲qa.message提供任意消息,而不是最新消息。 – AndreKR 2010-11-18 16:25:17

+0

我測試過,是的,消息被搞砸了,在這裏它的功能是用一個子查詢,但它不如AndreKR的漂亮:p – 2010-11-18 16:31:14