问题与MySQL查询

问题描述:

我有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

老问题。这里的解决方案: 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

那么你可以用不同的方式来处理它。您正在使用内部连接,这意味着无论如何您都不会显示没有答案的问题,因此请搜索按问题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