2010-01-02 5 views
2

다음 쿼리로 인해 문제가 발생합니다. 날짜별로 정렬되지 않습니다. 제가 잘못하고있는 것에 대한 어떤 도움이나 통찰력도 크게 감사 할 것입니다. 쿼리는 thread_id에 의해 항목을 얻은 다음 포럼 게시물과 마찬가지로 스레드에서 가장 최근의 게시물을 표시합니다. 하지만 ORDER BY 절을 사용하여 결과를 최신순에서 오래된 순으로 정렬하려고 시도하면 ORDER BY 절을 무시한 것처럼 보입니다.MySQL 쿼리가 ORDER BY 날짜가 아닙니다.

$query = "SELECT * 
      FROM messages 
      WHERE (thread_id, received) 
      IN (SELECT thread_id, MAX(received) 
       FROM messages 
       WHERE receiver='$user' OR sender='$user' 
        AND is_hidden_receiver!='1' 
       GROUP BY thread_id) 
      ORDER BY received DESC"; 

건배, 레아

+2

의미가 없습니다 -'SELECT *'에는'received' 열이 포함되어 있습니다. 이는 일부 DB의 요구 사항입니다. 따라서 '주문 접수'는 효과가 있습니다. –

+1

'received' 필드의 실제 데이터 유형은 무엇입니까? – Mike

+0

사용중인 MySQL 버전과 플랫폼은 무엇입니까? 표면적으로,'received' 컬럼이 실제로 DATE/TIME 타입이라면, MySQL의 버그보다 아마도 작동하지 않을 것이라는 핑계는 없습니다. –

답변

2

INT(11) 컬럼에 삽입 될 :

receiver='$user' OR sender='$user' AND is_hidden_receiver!='1' 

이 당신이 원하는되는 중 하나가 중합니다. 나는 이것이 왜 잘못 분류되어 왔는지 조금 신비 스럽다. 간결하게 설명하는 방법을 찾으면이 답변을 업데이트하겠습니다.

이 기능은 MySQL에 내장되어 있으며 TIMESTAMP 열 유형입니다. 이 솔루션을 사용하려면 먼저 read up on it a bit more이어야합니다. 테이블을 정의하는 f}에 따라 흥미로운 특성이 있습니다. 유형이 TIMESTAMP 인 컬럼은 작성 시간 소인 또는 수정 시간 소인 중 하나로 작용할 수 있습니다.

0

그것이 정말 "받은"으로 분류되지 않았거나 그냥 다른 결과가 예상보다를 받고 있는지 문제인가? 그것은 where 절에 대한 연산 순서 일 수 있습니다 - AND 또는 OR이 우선하는지 확실하지 않습니다. 어쩌면이 변경 시도 : 당신은 값을 생성하는 PHP time() 기능을 사용하고

(receiver='$user' OR sender='$user') AND is_hidden_receiver!='1' 

receiver='$user' OR (sender='$user' AND is_hidden_receiver!='1') 
+0

대괄호가 없으면'receiver = '$ user'OR (sender = '$ user'AND is_hidden_receiver!와 동일합니다!= '1')' –

+0

감사합니다. 나는 그런 것들을 결코 기억하지 못합니다. (나는 항상 AND와 OR을 혼합 할 때 괄호를 사용합니다.) – Jenni

+1

나는 AND와 OR을 괄호로 묶은 것에 대한 감정에 동의합니다. -하지만 그것은 아마도 문제의 원인이 아닙니다. –