问题与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组(删除所有其他列消息,只留下第一条消息 - 所以顺序是无用的)
任何帮助表示赞赏。谢谢
老问题。这里的解决方案: 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文章的方法)
我想只用1个查询,而不是子查询。 – FinalDestiny 2010-11-18 16:11:12
那么也许只是使用LEFT JOIN的解决方案!? – AndreKR 2010-11-18 16:14:04
我有两个不同的表格,不仅仅是这个例子中的一个。所以,我无法弄清楚如何去做。你能帮我查询一下吗?谢谢, – FinalDestiny 2010-11-18 16:17:26
那么你可以用不同的方式来处理它。您正在使用内部连接,这意味着无论如何您都不会显示没有答案的问题,因此请搜索按问题ID分组的最大答案,并加入问题表以获取标题。
这对于qa.id来说很好,但qa.message是错误的,仍然是第一个。例如,我想查找回复该消息的最后一位用户,MAX不会在这里工作, – FinalDestiny 2010-11-18 16:22:38
不会,这会为qa.message提供任意消息,而不是最新消息。 – AndreKR 2010-11-18 16:25:17
我测试过,是的,消息被搞砸了,在这里它的功能是用一个子查询,但它不如AndreKR的漂亮:p – 2010-11-18 16:31:14
您可以将某些示例数据发布到表,准确地告诉你要如何从存储的数据产生的输出? (例如,简单地删除“GROUP BY”似乎现在可以工作,但我不认为这就是你最终想要的)... – ircmaxell 2010-11-18 16:14:52
如果我删除组,我会得到所有的答案。例如,如果我有两个答案有一个问题,我将有2行显示该问题,而不是一个。如果我有X个问题,我想在查询时得到X行,所以只有最新的答案/问题, – FinalDestiny 2010-11-18 16:16:21