2014-03-05 3 views
0

나는 이벤트 목록을 보여주는 응용 프로그램을 작성 중입니다. 원래 응용 프로그램은 Drupal을 사용하고 이벤트를 '범위'로 표시했습니다. 따라서 3/4, 3/6, 3/8에 이벤트가있는 경우 날짜를 3/4 - 3/8로 표시합니다.연속 된 날짜가 아니면 개별 날짜 표시

최근 이벤트가 고급화되었으므로이 응용 프로그램을 사용자 지정 솔루션으로 이식했습니다. 고객이 방금이 동작이 혼란 스럽다고 요청했습니다. 그는 그것이 3/4, 3/6, 3/8이라고 말하고 싶지만 우리는 연속적인 날짜도 처리해야합니다.

이벤트가 3/4, 3/6, 3/8 및 3/10, 3/11, 3/12 인 경우 다음을 확인해야합니다. 3/4, 3/6, 3/8,

현재 이벤트 목록/10-3/12 (3) 마스터 이벤트 테이블

EventID (int) 
Event (varchar) 
Active (tinyint) 

그리고 이벤트 날짜 테이블 여기

EventDateID(int) 
EventDate 
EventTime 
EventID 

을 가지고이

내 SQL입니다
SELECT *, MIN(tblEventDates.EventDate) AS minDate 
FROM tblEvents INNER JOIN tblEventDates 
ON tblEvents.EventID = tblEventDates.EventID 
WHERE tblEvents.Active = 1 
AND tblEventDates.EventDate >= CURDATE() 
GROUP BY tblEvents.EventID 
ORDER By minDate, EventTime 

나는이 두 테이블을 조인하여 이벤트 목록을 생성합니다. 그 출력 루프 동안 나는 다시 개별 EventDates을 잡아 범위를

SELECT MAX(EventDate) AS maxDate, MIN(EventDate) AS minDate 
FROM tblEventDates 
WHERE EventID = '$EventID' 

생산에 질의 나는 가장 좋은 방법은이 범위의 일부 또는 고립 된 날짜가 표시 여부를 결정하는 것입니다 무엇 다만 확실하지 않다.

제안 사항? 그냥 원래 쿼리의 범위를 점점하지 않는 이유를 완전히 이해하지

+1

이것은 클라이언트 측 코드에서 더 잘 된 것입니다. SQL은 데이터 형식이 아닌 데이터 검색을 위해 더 많이 고안되었습니다. –

+0

나는 최선의 해결책이 루프를 통해 PHP를 처리 할 것이라고 생각한다. (두 번째 쿼리 참조) – hanji

+0

이것은 'DateTime'과'DateInterval'을 사용하여 PHP로 쉽게 처리 할 수있다 .... 물론 당신은 당신의 날짜를 만들어야 할 것이다. 그들이 DB에 저장되는 방법에 따라 다릅니다. 기본 DATETIME은 "YYYY-MM-DD"문자열이며, 간단한 '폭발'이 트릭을 수행해야한다고 생각합니다. –

답변

0

:

SELECT *, MIN(tblEventDates.EventDate) AS minDate, MAX(tblEventDates.EventDate) AS maxDate 
FROM tblEvents INNER JOI 
    tblEventDates 
    ON tblEvents.EventID = tblEventDates.EventID 
WHERE tblEvents.Active = 1 AND 
     tblEventDates.EventDate >= CURDATE() 
GROUP BY tblEvents.EventID 
ORDER By minDate, EventTime; 

이렇게하면, 당신은 maxDate를 얻기 위해 추가 쿼리가 필요하지 않습니다.

+0

날짜와 범위가 섞여 있습니다. 이것이 내가 달성하려고하는 결과입니다 .. "그래서 우리가 3/4, 3/6, 3/8 및 3/10, 3/11, 3/12의 이벤트를 갖는다면 우리는 다음 3 가지를 볼 필요가 있습니다./4, 3/6, 3/8, 3/10-3/12 " – hanji

+0

@hanji. . . 샘플 데이터와 원하는 결과를 제공하여 질문을 편집 할 수 있습니까? –

+0

이벤트 3/4, 3/6, 3/8 AND 3/10, 3/11, 3/12가있는 경우 다음 3/4, 3/6, 3/8, 3을 참조해야합니다./10-3/12 날짜 항목과 범위가 혼합되어 있어야합니다. 나는 PHP가 이것을위한 방법이라고 생각한다. MySQL을 통해 방금 끝났습니다. 그러나 솔루션은 날짜 배열을 제공하는 함수가 될 것입니다. – hanji