Ik heb een relatief simpele MySQL query, maar krijg niet de verwachte resultaten terug.
De query moet berichten (DM's) ophalen uit de database inclusief het aantal bijlagen dat erbij hoort.
Hier een (gestript) voorbeeld van de query:
Dit werkt perfect, maar alleen als er ook daadwerkelijk bijlagen zijn. Wanneer er geen bijlagen zijn voor het bericht, dan wordt deze niet getoond in de resultaten. Om dezelfde reden wordt het met een JOIN gedaan, zodat bijlagen niet verplicht zijn.
Het blijkt dat de JOIN de waarde NULL teruggeeft, waardoor de COUNT niets doet en dus geen resultaat kan vinden. Dit heb ik proberen op te lossen met NULLIF():
maar helaas werkt dit ook niet, omdat MySQL waarschijnlijk vindt dat de hele tabel niet bestaat.
Nu kan ik natuurlijk met meerdere queries werken, of met interne SELECT's, maar volgens mij moet mijn idee wel mogelijk zijn.
Is er iemand die hier een oplossing voor heeft, of moet ik gewoon "smerig" meerdere queries draaien om het verwachte resultaat te krijgen?
De query moet berichten (DM's) ophalen uit de database inclusief het aantal bijlagen dat erbij hoort.
Hier een (gestript) voorbeeld van de query:
SQL:
1
2
3
4
5
6
7
8
9
10
11
| SELECT `b`.`id`, `b`.`titel`, `b`.`onderwerp`, COUNT(`bb`.`bijlage_id`) as `bijlagen` FROM `berichten` as `b` LEFT JOIN `bericht_bijlagen` as `bb` ON `bb`.`bericht_id` = `b`.`id` |
Dit werkt perfect, maar alleen als er ook daadwerkelijk bijlagen zijn. Wanneer er geen bijlagen zijn voor het bericht, dan wordt deze niet getoond in de resultaten. Om dezelfde reden wordt het met een JOIN gedaan, zodat bijlagen niet verplicht zijn.
Het blijkt dat de JOIN de waarde NULL teruggeeft, waardoor de COUNT niets doet en dus geen resultaat kan vinden. Dit heb ik proberen op te lossen met NULLIF():
SQL:
1
| COUNT(NULLIF(`bb`.`bijlage_id`,0)) as `bijlagen` |
maar helaas werkt dit ook niet, omdat MySQL waarschijnlijk vindt dat de hele tabel niet bestaat.
Nu kan ik natuurlijk met meerdere queries werken, of met interne SELECT's, maar volgens mij moet mijn idee wel mogelijk zijn.
Is er iemand die hier een oplossing voor heeft, of moet ik gewoon "smerig" meerdere queries draaien om het verwachte resultaat te krijgen?