2013-01-11 32 views
1

我有两个表格,我将它们连接在一起,每个表格都有一个添加项目的日期。我想要做的是按照最后一次使用来自两个表格(如论坛)的日期列的顺序对行进行排序。有人提出了一个问题,而且问题在董事会的顶部,因为有新的问题被问及他们会被列入董事会的首位。问题向下移动,一旦有人发布了答案,它就会回到董事会的最高层。我怎样才能制定一个查询来做这样的事情?以下是我迄今为止:从2个表格中按日期排序

select question, question_id, count(a.answer_id) total 
from questions q 
left join answers a using(question_id) 
group by q.question_id order by question_id desc limit 10 
+0

您将最起码需要有每个岗位的时间戳(问/答)在各自的表格中。但是,个人而言,我会试图以不同的方式对数据进行建模:有一个“posts”表,其中包含一个标志,用于指示帖子的类型(或者是指示帖子在线程中的位置的索引号,其中'0'或无论表明第一篇文章,因此也是问题)。 – eggyal

回答

2

纠正我,如果我错了,但你只需要使用日期从问题订购,当没有答案。

在这种情况下:

order by COALESCE(a.date, q.date) desc 

http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_coalesce

关于第二个想法,这会导致查询失败,因为q.date和a.date是不是你组分析研究。 将q.date添加到组是可以的,但是通过将a.date添加到组将使得相同问题出现的次数与出现答案的次数相同。

所以,你应该改变你的加盟是这样的:

left join (select question_id, max(date) as date from answers group by question_id) a 
on a.question_id = q.question_id 

然后使用顺序由我建议

+0

您的第一部分编码工作! –