2014-02-21 2 views
1

특정 기준을 충족하는 특정 레코드를 가져오고 싶습니다. 그 중 하나는 특정 요일에 요일이있는 경우에만 찾을 수 있다는 것입니다. 나는 아래의 쿼리를 가지고 있으며, 평일을 입력하면 작동하지만 필드 이름을 사용하면 아무 결과도 반환하지 않습니다 ..MYSQL 현재 요일이 목록에있는 항목을 가져옵니다.

그래서 'dagen'필드에는 *에 대해 하루 중 하나가 포함됩니다. 목요일과 금요일에는 '5', '6'과 같은 평일의 목록. 내가 .. IN과 끝 부분에 dagen 교체 할 경우

SELECT * FROM playlist_item 
WHERE playlist_id='31' 
AND type_id='56' 
AND jobcomplete='0' 
AND startuur<=TIME(NOW()) AND einduur >=TIME(NOW()) 
AND (dagen='*' OR DAYOFWEEK(NOW()) IN (dagen)); 

는 (5,6)는 완벽하게 작동하지만 열 이름을 사용하는 경우 ... 나는 따옴표, 값으로 따옴표없이 시도했습니다 .. 그들 중 누구도 일하지 않습니다 .. 원하는 결과를 얻으려면 올바른 방법은 무엇입니까? 그 dagen 가정

SQLFiddle exaple 찾을 수 here

+0

예제 데이터 세트 –

답변

0

이 요일의 쉼표로 구분 된 목록을 포함하는 열이다, 이런 식으로 뭔가를 시도 : - 쉼표로 구분 된 것을

SELECT * FROM playlist_item 
WHERE playlist_id='31' 
AND type_id='56' 
AND jobcomplete='0' 
AND startuur<=TIME(NOW()) AND einduur >=TIME(NOW()) 
AND (dagen='*' OR FIND_IN_SET(DAYOFWEEK(NOW()), dagen)); 

주 목록은 일반적으로 제대로 정규화되지 않은 데이터베이스의 신호입니다.

+0

을 사용하여 문제의 [sqlfiddle] (http://sqlfiddle.com/) 예제를 제공 할 수 있습니까? 감사합니다. 나는 언제나 그 기록을 찾아야하는 날을 어떻게 선택하겠습니까? –

+0

더 나은 해결책은 요일과 재생 목록의 하루에 한 행으로 다른 테이블을 설정하는 것입니다. 그런 다음 색인을 생성 할 수있는 간단한 결합을 수행 할 수 있으며 FIND_IN_SET (색인을 사용할 수 없음)을 사용하는 것보다 훨씬 빠를 가능성이 큽니다. – Kickstart

관련 문제