Join met vier tabellen werkt niet correct
Bedankt Klaasjan en Noppes. Het klopt inderdaad dat de functie goed werkte (ondanks de GROUP BY). Ik heb dan ook twee functies doorelkaar gehaald. De volgende tekst is wel het echte probleem.
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?
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
Op zich zou dat geen probleem moeten zijn door de LEFT JOIN. Misschien komt het door het totaal misplaatste gebruik van GROUP BY?
Deze gebruik je namelijk alleen icm aggregate functies
Deze gebruik je namelijk alleen icm aggregate functies
Je GROUP BY klopt al niet
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.
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.




