2012-05-13 2 views
0

나는 다음 표 구조 토론 게시판이 있습니다두 값을 사용하여 MySQL에서 순서를 정의하지만 그 중 하나를 우선하는 방법은 무엇입니까?

+-------------------------------+ 
|  TABLE: MESSAGES   | 
+-------------------------------+ 
| id    | int(11)  | 
+-------------------------------+ 
| parent   | int(11)  | 
+-------------------------------+ 
| author   | int(11)  | 
+-------------------------------+ 
| last_reply  | datetime  | 
+-------------------------------+ 
| written  | datetime  | 
+-------------------------------+ 
| title   | varchar(256) | 
+-------------------------------+ 
| content  | text   | 
+-------------------------------+ 

last_reply의 기본값은 NULL입니다. 스레드가 응답하면 그 안에있는 모든 메시지의 last_reply은 최종 회신의 datetime으로 설정됩니다.

는 내가 달성하기 위해 노력하고있어 모두 last_replywritten이 고려 될 대화의 순서이지만, last_reply이 경우 written 이상 priorized 할 위치를 사용할 수 있습니다.

따라서 last_reply을 사용할 수있는 경우 해당 값을 주문에 사용합니다. 그렇지 않다면 우리는 서면을 사용합니다.

사과의 뜻이 잘못되어 사과드립니다.

내 최고의 기회는 지금까지이있다 :

SELECT *, COALESCE(last_reply,written) AS tmp FROM messages 
WHERE parent = 0 ORDER BY written DESC, tmp DESC 

이 제대로 작동하지 않습니다.

당신이 내 포인트를 얻을 경우, 올바른 방향 :

덕분에 저를 안내하시기 바랍니다.

답변

3
SELECT * FROM messages 
WHERE PARENT=0 
ORDER BY IFNULL(last_reply,written) DESC 
0

이 시도 :

SELECT *, COALESCE(last_reply,0) AS with_replay FROM messages 
WHERE parent = 0 
ORDER BY with_replay DESC,written DESC 
관련 문제