2013-04-04 4 views
0

Извините, если это глупый вопрос, но в последнее время он не использует много SQL-запросов и не может найти много помощи по этому поводу.MySQL показывает все столбцы при использовании предложения WHERE

Мне нужно, чтобы все строки отображались в результате, даже если результат равен 0 или null. Проблема, которую я имею, связана с предложением WHERE (без WHERE все строки отображаются, но данных нет).

SELECT SUM(c.amount) AS 'total_income', p.ref_id AS 'property' 
FROM property p 
LEFT JOIN contract c 
ON p.id = c.property_ref_id 
LEFT JOIN contract_payment cp 
ON c.id = cp.contract_id 
WHERE cp.paid = 1 AND year(cp.date_paid) = :year 
GROUP BY p.id 

Отображение результирующего набора без Where и Неверные данные были бы как этот

array 
    0 => 
    array 
     'total_income' => null 
     'property' => string 'test/0001' (length=9) 
    1 => 
    array 
     'total_income' => null 
     'property' => string 'test/0002' (length=9) 
    2 => 
    array 
     'total_income' => string '200' (length=3) 
     'property' => string 'test/0003' (length=9) 
    3 => 
    array 
     'total_income' => string '16100' (length=5) 
     'property' => string 'test/0004' (length=9) 

Хотя это результат устанавливается с предложением WHERE и хорошие данные, но не все строки

array 
    0 => 
    array 
     'total_income' => string '4200' (length=4) 
     'property' => string 'test/0004' (length=9) 

Может ли кто-нибудь прокомментировать меня, какие изменения могут быть внесены в SQL, чтобы получить нужные данные?

+0

Я думаю, что вы имеете в виду строки, а не столбцы. – Barmar

+0

Вы правы Barmar, Отредактированный вопрос. –

ответ

0

Проблема в том, что вы отфильтровываете все строки без соответствия в таблице cp, потому что cp.paid не может быть 1, когда там нет совпадения.

Изменение ИНЕКЕ:

WHERE cp.contract_id IS NULL OR (cp.paid = 1 AND year(cp.date_paid) = :year) 

или переместить, что условие в предложении ON в LEFT JOIN с ф:

ON c.id = cp.contract_id AND cp.paid = 1 AND year(cp.date_paid) = :year 
+0

По какой-то причине данные по-прежнему не очень хорошие, но очень близкие. Отличный ответ, поставил меня в правильном направлении. Спасибо друг –

Смежные вопросы