1

我有两个要连接在一起的表,每个表都有一个添加项目的日期。我想做的是使用两个表中的日期列按上次活动对行进行排序,有点像论坛。有人问了一个问题,这个问题在板的顶部,当新的问题被问到时,它们就会被放在板的顶部。问题会向下移动,一旦有人发布了答案,它就会回到板的顶部。我怎样才能制定一个查询来做这样的事情?这是我到目前为止所拥有的:

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
4

1 回答 1

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 添加到 group by 是可以的,但是将 a.date 添加到 group by 会使相同的问题出现的次数与有答案的次数一样多。

因此,您应该将您的加入更改为:

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

然后使用我建议的顺序

于 2013-01-11T17:51:17.913 回答