2017-01-12 3 views
0

나는 수상 스포츠 센터의 코스를 관리하는 데이터베이스가 있습니다. 나는 비교적 복잡한 SQL 쿼리를 사용하여 다른 컬럼들과 함께 다음 컬럼들을 가진 테이블을 생성 할 것이다.MySQL 증분 날짜 x 번 중복 행 쿼리

"코스 제목", "시작 날짜", "기간 (일)"

예.

XYZ Sailing Course  12/01/17 3 
ABC Windsurfing Course 13/01/17 2 

코스가 진행되는 각 날에 대한 행이있는보기/쿼리를 만들고 싶습니다. 그래서 위의 과정이 동시에있어 여러 날에 걸쳐 실행 다행히 경우

XYZ Sailing Course  12/01/17 
    XYZ Sailing Course  13/01/17 
    ABC Windsurfing Course 13/01/17  
    XYZ Sailing Course  14/01/17 
    ABC Windsurfing Course 14/01/17 

를 표시, 그래서 그것은 그렇지 않으면 중복 행을 변경해야에만 날짜 필드 것이기 때문. 또한 코스가 며칠 지속되면 중간에 틈이 생기지 않을 것입니다. 생각하지 못한이 출력물을 만드는 우아한 방법이 있습니까 (아니면 더러워진 것일까 요?)

빛에 대해 미리 감사드립니다.

+1

정말 SQL로해야합니까? 이런 종류의 일은 클라이언트 프로그래밍 언어에서 훨씬 쉽습니다. – Barmar

+1

아이디어를 찾으십시오 : http://stackoverflow.com/questions/2157282/generate-days-from-date-range –

+0

아이디어가 있어야합니다. 범위의 종료일로'DATE_ADD (시작 날짜, 간격 지속 시간 - 1 일) '만 사용하면됩니다. – Barmar

답변

0

OK, 나는 나에게 "시작 날짜"및 "종료 날짜"열을주고 주위를 내 원래의 쿼리에서 행을 jiggled이 조금 지저분했지만, 나는 @barmar

의 도움으로 그것을 덕분에 해결 , 다음 않았다

SELECT 
     `a`.`Date` AS `Date`, 
     Other rows required go here 
    FROM 
     ((SELECT 
      (CURDATE() - INTERVAL ((`a`.`a` + (10 * `b`.`a`)) + (100 * `c`.`a`)) DAY) AS `Date` 
     FROM 
      ((((SELECT 0 AS `a`) UNION ALL SELECT 1 AS `1` UNION ALL SELECT 2 AS `2` UNION ALL SELECT 3 AS `3` UNION ALL SELECT 4 AS `4` UNION ALL SELECT 5 AS `5` UNION ALL SELECT 6 AS `6` UNION ALL SELECT 7 AS `7` UNION ALL SELECT 8 AS `8` UNION ALL SELECT 9 AS `9`) `a` 
     JOIN (SELECT 0 AS `a` UNION ALL SELECT 1 AS `1` UNION ALL SELECT 2 AS `2` UNION ALL SELECT 3 AS `3` UNION ALL SELECT 4 AS `4` UNION ALL SELECT 5 AS `5` UNION ALL SELECT 6 AS `6` UNION ALL SELECT 7 AS `7` UNION ALL SELECT 8 AS `8` UNION ALL SELECT 9 AS `9`) `b`) 
     JOIN (SELECT 0 AS `a` UNION ALL SELECT 1 AS `1` UNION ALL SELECT 2 AS `2` UNION ALL SELECT 3 AS `3` UNION ALL SELECT 4 AS `4` UNION ALL SELECT 5 AS `5` UNION ALL SELECT 6 AS `6` UNION ALL SELECT 7 AS `7` UNION ALL SELECT 8 AS `8` UNION ALL SELECT 9 AS `9`) `c`)) `a` 
     JOIN `MyDB`.`All Courses`) 
    WHERE 
     (`a`.`Date` BETWEEN `All Courses`.`Start Date` AND `All Courses`.`Finish Date`) 

여기서 "모든 코스"는 모든 다른 행이있는 SQL보기입니다. 고마워, 모두 고쳐!