2014-09-19 51 views
0

好的,我一直在努力与这一个很远,任何援助将不胜感激。来自多个表的多个ORDER BY

我有2个表格:

表名称:列名称。 (只显示相关的列名)

Topics: topic_id, topic_cat, topic_stick 

Replies: reply_id, reply_date, reply_topic 

我试着去获得所有(topic_id)的那个=说1,但在此我需要它有序,使我得到的最新(REPLY_DATE),并且具有所有(topic_stick)在顶部。

Reply_topic = topic_id 

我一直没有成功语句后试图声明: 这一直是我最亲密的尝试,但表不排序,以我的愿望。

SELECT topic_id 
FROM topics, replies 
WHERE 
reply_topic = topic_id and 
topic_cat = 1 
GROUP BY topic_id 
ORDER BY reply_date DESC, topic_stick ASC 

回答

1
SELECT 
    t.topic_id, 
    t.topic_cat, 
    t.topic_stick, 
    r.reply_id, 
    r.reply_date, 
    r.reply_topic  
FROM replies r 
INNER JOIN topics t on t.topic_id = r.reply_topic 
WHERE 
t.topic_cat = 1 
GROUP BY r.reply_topic 
ORDER BY r.reply_date DESC 
+0

我之所以使用GROUP BY的原因是为了得到最近回复的线程,并且顶部还有粘连线程。当我运行你的语句时,它会返回每个线程的每个回复。 – DirtyRedz 2014-09-19 20:13:44

+0

@DirtyRedz好的,我想我现在更了解你的要求了。我已更改查询以从答复中选择并按reply_topic分组。 – Donal 2014-09-19 20:18:14

+0

感谢只需添加第二个ORDER BY,它的工作表示感谢 – DirtyRedz 2014-09-19 20:31:52

0

反向您的ORDER BY子句中的顺序。你想:

ORDER BY Topics.topic_stick, Replied.reply_date DESC

你提到“如果他们说1” - 如果你正在使用0意味着无粘性,你将不得不作出一个DESC为好。