2013-06-25 135 views
1

我有一个主题的表,我有一个表的评论。MYSQL:订购主题通过最新评论(评论有主题)

主题

ID TOPIC 
1 Guns 
2 School 
3 Politics 
4 War 

评论

DATE  TOPIC  TEXT 
5/4/2013 School 'I love school.' 
5/5/2013 War  'War sucks.' 
5/6/2013 Politics 'I like politics... sometimes.' 
5/7/2013 Guns  'I have a few guns. Do you?' 
5/8/2013 War  'Stop fighting you guys.' 

我需要的是一个MYSQL语句产生这样的结果(在最近与主题相关的大部分评论的顺序排列):

TOPIC 
War 
Guns 
Politics 
School 

这是按最新评论排序的主题列表。

+3

你有什么试过?另外,在评论表中包含实际主题是多余的,因为您应该只有主题表ID。这样,您可以随时更改/修改主题,并且不会影响您的评论表。 – Sean

回答

0
SELECT * FROM `table` WHERE `topic` = 'War' ORDER BY `date` 
UNION 
SELECT * FROM `table` WHERE `topic` = 'Guns' ORDER BY `date` 
UNION 
SELECT * FROM `table` WHERE `topic` = 'Politics' ORDER BY `date` 
UNION 
SELECT * FROM `table` WHERE `topic` = 'School' ORDER BY `date` 

没有真正效率的母亲,但会运行

1

一些建议 -

  1. 更改日期列的格式MySQL的日期格式YYYY-mm-dd
  2. 让你的主题列对该TOPIC主题表ID的引用

鉴于这些变化,你可以用这个查询做到这一点 -

SELECT t.`TOPIC` FROM Comments c 
JOIN Topics t ON t.ID = c.`TOPIC` 
GROUP BY c.`TOPIC` 
ORDER BY MAX(`DATE`) DESC 

你可以看到这个SQLFiddle例子 - http://sqlfiddle.com/#!2/02560/1

0

您正在寻找此查询:

SELECT t.topic FROM Comments c 
INNER JOIN Topics t ON t.topic = c.topic 
GROUP BY c.topic 
ORDER BY c.date DESC 

我建议添加这些:

  • 根据MYSQ更改日期格式L.
  • 使用主题ID作为参考而不是主题。