Join met vier tabellen werkt niet correct
Ik heb drie tabellen: nieuws, nieuws_reacties, nieuws_fotos.
Ik gebruik onderstaande query om de data op te halen. Het resultaat moet een nieuwsbericht zijn met een fototje en er moet te zien zijn hoe veel reacties het nieuwsbericht heeft.
Er is alleen een probleem wanneer er geen nieuws_reactie_id, foto_id aan een nieuwsbericht is gekoppeld: de nieuws_id(FK) uit de nieuws_reactie tabel ontbreekt dan. Kortom onderstaande query is niet mogelijk wanneer de nieuws_id uit de nieuws_reactie tabel of foto tabel ontbreekt. Hoe zou ik een juiste query moeten schrijven?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
function getAllNieuws($limit) {
$query = "
SELECT
n.nieuws_id, n.kop, n.subkop,n.datum, n.bericht, ns.image_id, ns.image_name, ns.type, ns.size, ns.nieuws_id, COUNT(r.nieuws_reacties_id) AS aantalReacties, r.naam, r.datum, r.bericht AS reactie, r.nieuws_id
FROM
nieuws n
LEFT JOIN
nieuws_fotos ns
ON
ns.nieuws_id = n.nieuws_id
LEFT JOIN
nieuws_reacties r
ON
r.nieuws_id = n.nieuws_id
GROUP BY
??????
ORDER BY
n.datum DESC
LIMIT
:limit
";
?>
function getAllNieuws($limit) {
$query = "
SELECT
n.nieuws_id, n.kop, n.subkop,n.datum, n.bericht, ns.image_id, ns.image_name, ns.type, ns.size, ns.nieuws_id, COUNT(r.nieuws_reacties_id) AS aantalReacties, r.naam, r.datum, r.bericht AS reactie, r.nieuws_id
FROM
nieuws n
LEFT JOIN
nieuws_fotos ns
ON
ns.nieuws_id = n.nieuws_id
LEFT JOIN
nieuws_reacties r
ON
r.nieuws_id = n.nieuws_id
GROUP BY
??????
ORDER BY
n.datum DESC
LIMIT
:limit
";
?>
Gewijzigd op 01/01/1970 01:00:00 door Marco
Deze gebruik je namelijk alleen icm aggregate functies
daar horen alle velden benoemd te worden die niet aggergate zijn
Voor mysql geldt doordat deze niet goed geconfigureerd is je geen foutmelding erop krijgt terwijl dat toch echt wel behoort te geschieden.