나는 이벤트 목록을 보여주는 응용 프로그램을 작성 중입니다. 원래 응용 프로그램은 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'
생산에 질의 나는 가장 좋은 방법은이 범위의 일부 또는 고립 된 날짜가 표시 여부를 결정하는 것입니다 무엇 다만 확실하지 않다.
제안 사항? 그냥 원래 쿼리의 범위를 점점하지 않는 이유를 완전히 이해하지
이것은 클라이언트 측 코드에서 더 잘 된 것입니다. SQL은 데이터 형식이 아닌 데이터 검색을 위해 더 많이 고안되었습니다. –
나는 최선의 해결책이 루프를 통해 PHP를 처리 할 것이라고 생각한다. (두 번째 쿼리 참조) – hanji
이것은 'DateTime'과'DateInterval'을 사용하여 PHP로 쉽게 처리 할 수있다 .... 물론 당신은 당신의 날짜를 만들어야 할 것이다. 그들이 DB에 저장되는 방법에 따라 다릅니다. 기본 DATETIME은 "YYYY-MM-DD"문자열이며, 간단한 '폭발'이 트릭을 수행해야한다고 생각합니다. –