У меня есть следующий запрос, который объединяет несколько таблиц

SELECT targa,
registrazioni.turno as turno,
conduttori.nome as nome,
conduttori.cognome as cognome,
spese_importo,risparmio,km, SUM(spese.spese_importo) AS totspese
FROM registrazioni LEFT JOIN conduttori
ON id_conduttore=conduttori.id
LEFT JOIN spese
ON registrazioni.id=spese.id_registrazione
WHERE dataora='$data';

Когда я добавил эту СУММ (spese.spese_importo), у меня возникла небольшая проблема, и даже если запрос не должен был иметь для меня какой-либо соответствующий результат, я получаю в результате пустую строку, в которой каждое поле равно NULL.

Конечно, если я удалю эту СУММ из своего запроса, он снова заработает, и у меня не будет строк в результате запроса.

Как я могу решить эту проблему и проверить, есть ли результаты, отличные от нуля?

Я пробовал через mysql добавить условие

WHERE targa IS NOT NULL

(targa - это всего лишь одно поле, которое я случайным образом выбираю между разными полями, все они NULL)

Но он не очистил строку, и через php я использовал условие

mysqli_num_rows($result)==0

Но теперь, когда у меня всегда есть хотя бы одна строка, это не работает.

Какие-нибудь другие идеи для проверки перед получением строк?

1
GabAntonelli 30 Дек 2013 в 03:22

2 ответа

Лучший ответ

Из http://www.w3schools.com/sql/sql_join_left.asp:

Ключевое слово LEFT JOIN возвращает все строки из левой таблицы (table1) с соответствующими строками в> правой таблице (table2). Если совпадения нет, то результат будет NULL с правой стороны.

Создает ли включение sum (spese.spese_importo) ситуацию, при которой вы получите совпадение с левой стороны соединения, но не с правой стороны - и получите эти NULL?

1
tcchappelear 30 Дек 2013 в 00:12

Я думаю, вы хотите сгруппировать свои результаты. Попробуйте добавить это в конце вашего запроса:

GROUP BY registrazioni.id
1
toph 30 Дек 2013 в 00:51