2011-12-27 37 views
1

OK夫人和绅士,我会很感激一些帮助:SQL查询 - 按日期的订单,而且组

这是我的表:

 
ID  postID replyID content entry_date 
1  0   40   hey   12/7 
2  0   40   hi   12/8 
3  0   40   whatsup  12/9 
4  2   40   why?  12/10 
5  0   40   who?  12/11 

我需要运行一个查询来获取它像这:

 
ID  postID replyID content entry_date 
1  0   40   hey   12/7 
2  0   40   hi   12/8 
4  2   40   why?  12/10 
3  0   40   whatsup  12/9 
5  0   40   who?  12/11 

你会看到ID 3和4已经切换。所以基本上我需要通过entry_date来进行ASC,除非ID = POSTID,那么我需要这两个组合在一起,还有entry_date的ASC。

这里是我试过,但我完全失去了:

SELECT t1.ID, t1.postID, t1.replyID, t1.content, t1.entry_date 
    FROM discussion t1, discussion t2 
WHERE t1.replyID = '40' AND t1.ID = t2.postID 
ORDER BY t1.entry_date ASC 

这基本上什么也不做,但发现其中ID的行=帖子ID

一行
+2

由于您的数据都没有'ID == PostID',所以您对需求的解释很混乱。 – 2011-12-27 19:43:43

+0

是的。你能重新阅读和编辑你的问题吗? – 2011-12-27 20:32:47

回答

5

您可以添加CASE声明您ORDER BY条款

ORDER BY 
    CASE WHEN postID = 0 THEN ID ELSE postID END 
    , entry_date 

这样做,你可以放弃产品总数的加盟,整条语句可以简化到

SELECT ID 
     , postID 
     , replyID 
     , content 
     , entry_date 
FROM discussion 
ORDER BY 
     CASE WHEN postID = 0 THEN ID ELSE postID END 
     , entry_date 

请注意,我假设入境日期是一个DATETIME列,而不是VARCHAR列。

+0

是的!工作,非常感谢你! – JohnnyRocket 2011-12-29 00:41:55