2013-06-25 136 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作爲參考而不是主題。