2017-05-18 1 views
0

작업의 시작 날짜와 종료 날짜가 게시 된 날짜와 시작 날짜가 설정되었지만 끝나는 모든 데이터를 반환하는 쿼리를 작성하려고합니다. 날짜가 0000-00-00이면 종료일이 없으므로 데이터가 결과에 계속 표시됩니다. 또한 그 주에 현재 주일을 벗어난 결과가 표시되어야합니다 (예 : NOW()). 따라서 게시 된 날짜의 주와 현재의 주를 비교하고 게시 된 날짜의 주간이 더 높은 경우 결과가 표시되어야합니다.연도와 날짜 사이의 데이터 표시

내 데이터베이스 구조는 다음과 같습니다

id cons_id  day_name  start_date  end_date  status_code 
___________________________________________________________________________ 
1 105   Wednesday  2017-05-17  0000-00-00  0 
2 106   Wednesday  2017-05-24  2018-06-20  0 
3 107   Thursday  2017-05-25  2030-02-28  0 
4 108   Friday   2017-05-19  2019-01-25  0 
5 109   Wednesday  2018-01-03  2018-02-14  0 

내 쿼리는 다음과 같습니다

SELECT i.cons_id AS 'cons_id', 
       i.type AS 'type', 
       i.day_name AS 'day_name', 
       i.day_num AS 'day_num', 
       i.start_date AS 'start_date', 
       i.end_date AS 'end_date', 
       i.created_at AS 'created_at', 
       i.updated_at AS 'updated_at' 
       FROM recurent_cons AS i 
       WHERE i.status_code = '0' 
       AND ('2017-05-26' BETWEEN i.start_date AND i.end_date) 
       AND i.end_date >= '2017-05-26' 
       OR i.end_date = '0000-00-00' 

쿼리 상기도 옳지 않다 현재 주에 id 1 기록을 보여줍니다, 또한 연도를 2018으로 변경하면 올해의 레코드가 표시되지 않습니다 2017 레코드의 종료 날짜는 2018

0123입니다. 내가 2017년 5월 24일을 선택하는 경우

, 내가 볼 수 :

id cons_id  day_name  start_date  end_date  status_code 

1 105   Wednesday  2017-05-17  0000-00-00  0 
3 107   Thursday  2017-05-25  2030-02-28  0 
5 109   Wednesday  2018-01-03  2018-02-14  0 

현재 날짜를 제외하고 미래를 보여줍니다

그래서 결과는 다음과 같이 될 것입니다 날짜 + 무한대 하나 (0000-00-00)

+0

Pls는 예상 된 방법 제공을 출력은 단순히이 사실에 기초하여 당신이 무엇인지 이해하지 못하기 때문에 생겼을 것입니다. – Shadow

+0

예상되는 결과를 보여줄 수 있습니까? – Alexander

답변

0

마지막 은 id=1 인 항목에 해당합니다. 이유 i 귀하의 질의 결과에 t가 표시됩니다.

당신은 아마 이렇게하고 싶었 :

SELECT i.cons_id AS 'cons_id', 
     i.type AS 'type', 
     i.day_name AS 'day_name', 
     i.day_num AS 'day_num', 
     i.start_date AS 'start_date', 
     i.end_date AS 'end_date', 
     i.created_at AS 'created_at', 
     i.updated_at AS 'updated_at' 
FROM recurent_cons AS i 
WHERE i.status_code = '0' 
    AND ('2017-05-26' BETWEEN i.start_date AND i.end_date) 
    AND (i.end_date >= '2017-05-26' OR i.end_date = '0000-00-00') 

당신은 현재 날짜, 미래에 있거나 아직 끝나지 않았다 모든 항목을 원하는 경우 :

SELECT i.cons_id AS 'cons_id', 
     i.type AS 'type', 
     i.day_name AS 'day_name', 
     i.day_num AS 'day_num', 
     i.start_date AS 'start_date', 
     i.end_date AS 'end_date', 
     i.created_at AS 'created_at', 
     i.updated_at AS 'updated_at' 
FROM recurent_cons AS i 
WHERE i.status_code = '0' 

    AND (i.start_date >='2017-05-26' # Future and current 
     OR i.end_date = '0000-00-00') # Didn't finish yet 
+0

내가 이렇게하면 무한대가 전혀 나타나지 않습니다. – Rhynix

+0

글쎄요, 당신의 목표/작업이 정확히 무엇인지 모르겠지만, 현재 달을 선택하면 나타나지 않아야한다고 게시물에 말했습니다. 그것은 나타납니다? 나는 조금 혼란스러워. 더 많은 문맥을 제공해야 할 수도 있습니다. –

+0

샘플 결과를 게시했습니다. – Rhynix

관련 문제