2009-07-23 2 views
1

직원 스케줄 DB를 확인하고 (이전 stackoverflow 질문 덕분에) 사용자가 "작업하지 않음"으로 작업하지 않는 요일을 반환하는 MySQL 쿼리가 있으므로 if 사용자가 목요일에 작업하지 않으면 날짜가 원래 결과 집합에 나타나지 않더라도 PHP 스크립트를 통해 해당 공백을 채울 필요는 없지만 쿼리는 해당 날짜를 채 웁니다.MySQL이 일부 null이 아니라 모든 null을 병합합니다.

이제 문제는 사용자가 2 주 후 일정을 확인하면 전체 1 주일 동안 "실업"으로 표시된다는 것입니다. 결과가 없으면 스크립트는 "죄송합니다. 이번 주에 게시 된 일정 없음"을 출력해야하므로 사용자는 그가 일주일을 잘못 생각하고 나중에 다시 확인한다는 사실을 알게됩니다. 은 같은에 가장 적합한 쿼리 구문 무엇입니까 :

그래서 질문은 모든 행이 null의 경우는 모든 행을 반환하지 않습니다 그래서

SELECT 
If Count(*) > 0 { 
COALESCE(gooddata, nulldata) AS thedata 
etc. 
etc. 
FROM sched_table 
WHERE dates BETWEEN xxx AND yyy 

(또는 수는 0이다).

나는 카운트를위한 열을 추가하고 스크립트 출력을 "게시하지 않음"을 시도하고 한 번의 반복 후에 종료했지만 좋은 한주에 한 번의 반복 후에도 종료되기 때문에 좌절하게됩니다.

나는 한 걸음 뒤로 물러나면 원하는 것을 할 수 있다고 확신하지만, 쿼리에 그렇게 할 수있는 방법이 있다면 매우 궁금하다. 다른 널 (null) 행을 병합하기 위해 적어도 하나의 널 (Null)이 아닌 값의 행.

답변

2

가 애애 오, A는 그 중 하나가 조건 EXISTS이 개 내부 선택과 가입? 진심이야? 공백을 채우기 위해 간단한 UNION을 사용하는 방법은 어떻습니까 ?? :) 같은 것

SELECT real_week_data UNION SELECT fake_empty_week;

이 UNION 것조차 고유의 당신을위한 결과,

2

필자는 실제로 데이터베이스를 사용하여 행 수준 서식 지정/조건부 출력 작업을 수행 할 수 있다고 생각합니다. PHP는 실제로 MySQL보다 문자열 비교와 산술을 수행하는 것이 훨씬 빠릅니다. 필자가 작업해온 개발자들 사이에 쓰여지는 정책은 데이터베이스를 사용하여 출력물을 포매팅하지 않았기 때문에 여기서하고있는 일과 함께 그 영역에 들어서고 있다고 생각합니다.

다른 사람들이이 제안에 동의하는 경우 알고 싶습니다. 실제로 새로운 질문으로 게시 할 수 있습니다 ... 형식 출력에 데이터베이스를 사용하는 데 어디에서 선을 그어야합니까?

+1

내가 그 생각을 들었습니다 최근까지 최대로 준수했다 .. 당신이 원하는 정확히 무엇을 포기. 하지만 세 가지로 db 포맷팅으로 옮겨 가고 있습니다 : 1) 그것을 할 수 있습니다 (그리고 mysql 문서에서 다른 방법으로 문서를 만드는 방법에 대한 더 많은 문서가 있습니다). 2) 결과를 여러 번 반복하고 싶지 않습니다. mysql이 하나의 쿼리에서 채워진 공백을 반환 할 수있는 시간, 3) 강력한 쿼리를 사용하면 다른 언어로 더 빨리 이동할 수 있습니다. 그 메모에, 나는 견과류에 가야하고 쿼리가 이미 태그에 싸여있는 데이터를 반환하도록 유혹을 받았다. 그러나 지금은 너무 많은 데이터 포맷이 아니다 ... – Anthony

+0

"데이터"즉 날짜 사이의 공백을 반환한다. 그것을하는 PHP의. – Anthony

+0

@anthony - ooohhh ...데이터베이스를 사용하여 산출물을 마크 업합니다. 방금 나를 울게 만들었 어. – codemonkey

0

대부분의 쿼리는 일종의 행 집합으로 조인하여 모든 요일을 생성합니다.

는 행 집합에 조건을 추가

SELECT COALESCE(gooddata, nulldata) AS thedata 
FROM (
     SELECT * 
     FROM days_of_week 
     WHERE EXISTS 
       (
       SELECT NULL 
       FROM sched_data 
       WHERE dates BETWEEN xxx AND yyy 
       ) 
     ) 
LEFT OUTER JOIN 
     sched_data 
WHERE dates BETWEEN xxx AND yyy 
관련 문제