2011-11-27 3 views
1

에 의한 주문에 따라 약 일주일MySQL의 쿼리는 다음 필드가 나는 MySQL의 테이블이 두 필드

id, morning, evening, event, other-fields 

, 일부 이벤트는 아침 또는 저녁에 하나 발생합니다 매일. 따라서 이벤트는 "아침"또는 "저녁"필드에 저장된 "일 수"와 함께 테이블에 기록됩니다 (이벤트가 아침에 발생하면 아침 필드에 "일 수"가 포함되고 저녁 필드에는 0이 포함됩니다). 그리고 그 반대의 경우). 이 항목은 순서대로 또는 일일이 작성되지 않지만 사용자 자신의 의지에 따라 작성됩니다.

이러한 레코드를 적절한 순서로 가져와야합니다. 즉, 레코드를 날짜별로 오름차순으로 정렬하고 각 날짜의 레코드를 세션별로 정렬해야합니다 (예 : 아침부터 저녁까지 정렬해야 함).

이 두 필드의 데이터를 정렬하는 아이디어를 도우십시오.

3 일 동안 일부 샘플 데이터가 다음과 같은 :

id,  mor,  even,  otherstuff.... 
1   1   0 
2   3   0 
3   3   0 
4   2   0 
5   3   0 
6   3   0 
-------------------------- 
7   0   1 
8   0   2 
9   0   3 
10  0   3 
---------------------- 

수행하면됩니다 내가 그것을 가져 오기 위해 필요한 형식으로 같은 위의 데이터는 :

id,  mor,  even,  otherstuff.... 
1   1   0 
2   0   1 
-------------------------- 
3   2   0 
4   0   2 
------------------------ 
5   3   0 
6   3   0 
7   3   0 
8   3   0 
9   0   3 
10  0   3 
+1

DateTime 필드를 사용하지 않는 이유는 무엇입니까? – Zoidberg

+0

그것은 당신에게 좋은 질문입니다. 그러나 나는 들판에 들어갈 날짜가 없습니다. 나는 사건이 언제 일어날 지 모르지만 그것이 4 일 또는 10 일 등등이라는 것을 안다. 일수는 고정되어 있고, 사건의 수는 고정되어 있지 않으며 날짜와 시간은 고정되어 있지 않다. 내가 아는 바로 저녁과 아침과 낮의 숫자입니다. –

답변

2

그 중 하나는 항상 0 인 경우, 요일 번호는 mor + even과 같아서 정렬 할 수 있습니다.

select * 
from your_table 
order by (mor + even), even; 

"일"기록에 대한 even = 0 때문에, 같은 날 번호에 어떤 "도"기록하기 전에 나타날 것입니다.

+0

이것은 나를 위해 잘 작동합니다. 감사. 어떤 상황에서 동일한 상황이지만 어떻게 든 두 필드를 요약 할 수 없습니다. 그들이 A, B, C 등이었고 숫자가 아닌 경우. –

+0

한 문자열이 항상 null이고 다른 문자열이 아니라면'(mor + even)'을'coalesce (stringA, stringB)'로 바꿀 수 있습니다. 한 문자열이 비어 있고 다른 문자열이 아니라면 당신은'case = stringA = ''then stringB else stringA end'와 같은 것을 사용할 수 있다고 가정합니다. 귀하의 경우에 가장 적합한 솔루션은 아마도 다른 숫자의 테이블 레이아웃 일 것입니다. 그날의 숫자는 단일 열이고 아침/저녁 깃발은 다른 열입니다. – Martin