2012-09-14 3 views
0

발견되는 경우 좌 가입 :MySQL은 - 아무것도 나는 다음과 같은 쿼리를 가지고

SELECT  budgets_income.income_amount, budgets_income.rule_type, budgets_income_rules.day_of_week, budgets_income_rules.interval_week, budgets_income_rules.fixed_day, budgets_income_rules.last_day_month, budgets_income_rules.date_start, budgets_income_rules.date_end 
FROM  budgets_income 
LEFT JOIN budgets_income_rules USING (income_id) 
WHERE  budgets_income.account_id = :account_id 
    AND 
    (
     budgets_income_rules.date_start <= :date_end 
    ) 

budgets_income.rule_type 경우는 1 또는 2와 동일을, 다음 테이블 budgets_income_rules 거기에 내가 LEFT JOIN로 얻을의 규칙있다 - 이건 괜찮아.

이제 규칙이 0과 같은 경우 규칙이 존재하지 않음을 나타냅니다. 규칙이 존재하지 않으므로 budgets_income_rules.date_start 필드는 행이 다른 행과 함께 페치되지 않음을 의미합니다 (WHERE budgets_income_rules.date_start <= :date_end). 내가 이런 짓을, 모든

  • 첫째 :

    나는이 일을 시도

    전혀 작동하지 않기 때문에

    AND 
    (
        budgets_income_rules.date_start <= :date_end 
         OR 
        budgets_income_rules.date_start NOT EXISTS 
    ) 
    
    가 잘 작동하지 않았다.

  • 그 후, 나는이 같은 anoter 시도했다 : MySQL의이 LEFT JOIN에 행을 찾을 수없는 경우, 다음 열이 NULL로 설정되어 있기 때문에 논리로 일했다

AND 
(
    budgets_income_rules.date_start <= :date_end 
     OR 
    budgets_income_rules.date_start IS NULL 
) 
.

이제 내 질문에 더 좋은 방법이 있을까요?

감사합니다.

+0

당신의 방법은 괜찮습니다. 'IS NULL'은 왼쪽 결합 된 행이 존재하지 않는지 알아내는 표준 방법입니다. –

+0

@MichaelBerkowski 확인해 주셔서 감사합니다. 그러나 나는 아래의 해답에서 건들 리타가 말한 것처럼 알 수있는 방법을 원했습니다. –

답변

1

레코드에서 date_start이 NULL 인 행도 표시됩니다. budgets_income_rules 테이블의 id를 사용하여 NULL을 테스트 할 수 있습니다. 행이 존재하지 않는 조인 쿼리에서만 NULL이 될 것이기 때문입니다.

budgets_income_rules.id IS NULL 
+0

나는 당신을 좋아하고 일하고있다! 고마워. 다음은 SELECT 문에 추가 한 내용입니다. IF (budgets_income_rules.income_id IS NULL, 0, 1) AS has_rule' –

+0

위대한. 당신의 if 호출은 아마'budgets_income_rules.income_id IS NOT NULL'으로 표현 될 것입니다. 왜 그것을 선택해야하는지 확실히 알 수 없으며, 직접 필드에 넣을 수는 없습니까?)? – gandaliter

+0

규칙이 없으면 수입이 단일 항목 (하나의 고유 수입)으로 취급되어야하고 규칙은 매 2 주마다 유사한 급여 일 수 있음을 의미합니다. 규칙에 시작 이름이없는 경우가 발생할 수 있습니다. 왜 내가 그 장소에 넣지 않습니까? MySQL에 작업량을 줄이고 IF를 사용하여 PHP에서 수행합니다. –

관련 문제