SQL-запрос - сортировка по дате, а также группировка - PullRequest
1 голос
/ 27 декабря 2011

ОК. Дамы и господа, я был бы очень признателен за помощь:

Это моя таблица:

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 поменялись местами.Так что в основном мне нужно ASC по entry_date, если только ID = POSTID, тогда мне нужно, чтобы эти два сгруппировались вместе, а также ASC по entry_date для этих двух.*

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 = строка postID

1 Ответ

5 голосов
/ 27 декабря 2011

Вы можете добавить оператор 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.

...