2013-08-09 3 views
0

안드로이드 폰에서 볼 수있는 SMS 메시지를 작성하려고합니다.내 SQL에서 두 개의 열을 사용하여 주문하는 방법?

내 MySQL 데이터베이스에는 전화기의 SMS와 같은 메시징을 추적하는 데 사용되는 테이블이 있습니다.

표는 사용자가 로그인 할 때, 그들은 하나가 전송하거나 전송있어 것을, 모든 메시지를 다운로드 할 필요가

id     (the message id) 
from_member_id  (the id of the member who sent this message) 
to_member_id  (the id of the member who the message was sent to) 
date sent   (the date it was sent) 
active    (if this message is deleted or active) 
text    (the text) 

입니다.

기본적으로 "내 ID가 원본 ID와 동일하거나 같은 ID를 가진 모든 레코드를 제공합니다"라는 SQL 문을 만들 수 있습니다.하지만 내가하고 싶은 것은 SQL 문을 표시 할 때 처리하기 쉬운 방식으로 정렬하는 것입니다. 내 안드로이드 애플 리케이션의 텍스트.

기본적으로 나는 그것을 정렬하여 해당 ID가 사용자가 아닌 사용자 (from 또는 to)가되도록 정렬하고 싶습니다. 또한 날짜 또는 최근에 보내거나받은 항목별로 주문해야합니다. 내 ID가 5이면

그래서 예를 들어, 나는 그것이 비교를 위해 사용하는 날짜 기록이 가장 최근의 것 곳에 따라서도 날짜별로 정렬됩니다

From To Date 
5  6 july 28 
6  5 july 7 
6  5 july 7 

5  2 july 26 
5  2 july 26 
2  5 july 26 

같은 데이터를 수신 할 각 그룹.

내가 올바르게 설명했는지 확신 할 수 없으므로 더 구체적으로 설명해야한다고 알려주세요.

감사합니다.

+1

SQL을 포함하려면 [편집]하십시오. 자신이 현재하고있는 것을 보여주지 않을 때 원하는대로 작동시키는 법을 알려주지 않습니다. –

+0

* 그래서 당신이 아닌 이드가 (from 또는 from)이 순서대로 *되도록 - 어떤 의미로? 다른 사람들이 결과에서 제일 먼저해야합니까? 날짜가 다른 무엇보다 중요할까요? 보통 'ORDER BY column_a ASC, column_b DESC' 만 사용하면됩니다. – h2ooooooo

+0

기본적으로, 행을 특별한 방법으로 정렬해야합니다. 순서를 사용하면 열을 선택해야하지만, 값으로 정렬하고 싶은 경우에는 사용자 ID가 아니라 그 부분입니다. 이해한다. – omega

답변

1

본질적으로 "대화 대상"과 날짜별로 그룹화하려고합니다. 여기

SELECT 
    from_member_id, 
    to_member_id, 
    (CASE WHEN from_member_id = ? THEN to_member_id ELSE from_member_id END CASE) AS conversation_member_id, 
    date_sent 
FROM table 
WHERE from_member_id = ? 
OR to_member_id = ? 
ORDER BY conversation_member_id DESC, date_sent DESC 

을 물론 ?은 당신이 쿼리하는 ID는 다음과 같습니다

나는 당신이해야 할 것은이 같은으로 주문할 수 있습니다 인공 필드를 채울 수있는 경우 문이라고 생각합니다.

+0

나는 '다른'id에 의해 주문한 다음 날짜별로 뭔가를 알아 차린 다음 동일한 '다른'id의 각 섹션에 대해 해당 섹션에 날짜가 주문됩니다. 그러나 모든 섹션과 관련하여 날짜별로 어떻게 주문합니까? – omega

+0

아, 네 질문에서 바로 그 초기 요구 사항을 읽지 않았습니다. 그것은 상황을 더욱 복잡하게 만듭니다.나는 아마도 conversation_member_id에 의해 최대 날짜를 결정하기위한 부질의를 만들었을 것이고, 그리고 그 부질의 결과를 그 최대 열을위한 추가적인 순서로 보여지는 질의에 결합시킬 것이다. 솔직히 그럴 필요가 있다면, 항상 최신 타임 스탬프로 업데이트 할 수있는 별도의 "대화"테이블을 갖도록 DB 스키마에 대해 생각해 보는 것이 좋습니다. 이 기능이 없으면 쿼리가 매우 비효율적입니다. –

+0

mysql에서 마지막으로 복잡한 순서를 지정하지 않으면 어떻게됩니까? 자바 코드에서 전화가 내 안드로이드 앱의 데이터를 가져올 때 어떻게합니까? – omega

0
ORDER BY IF(`from`=yourid, `to`, `from`) DESC, date asc ; 

이 문제는 귀하의 문제를 해결합니다. 날짜별로 주문을 추가로 추가 할 수도 있습니다.

+0

날짜가 편집 된 내 대답 – Akhil

+0

날짜는 귀하의 요구 사항에 따라 오름차순 또는 내림차순 일 수 있습니다. – Akhil

+0

마이크 브랜트 (Mike Brant) 대답에 대한 위의 의견을 참조하십시오. – omega

관련 문제