Door
Jan Horden
op 30-01-2012 19:58
gewijzigd op 30-01-2012 20:02
2.125 views
Hey ik zit met het volgende probleem:
Ik wil in een tabel het aantal reacties weergeven + de laatste reactie uit de tabel 'reacties'. Dit is natuurlijk niet zo'n probleem alleen wil ik ook het onderwerp uit de tabel 'onderwerp' weergeven. Mijn query ziet er nu als volgt uit:
SELECT onderwerp.id, onderwerp.onderwerp, COUNT( reactie.id ) AS aantal, reactie.auteur AS re_auteur
FROM onderwerp, reactie
WHERE onderwerp.id = reactie.ond_id
AND reactie.id IN (SELECT MAX(id) FROM reactie WHERE ond_id = 3)
GROUP BY onderwerp.id
ORDER BY onderwerp.id DESC
Het probleem zit hem nu in het feit dat door de AND statement waar de laatste reactie wordt opgevraagd er altijd maar 1 resultaat wordt weergegeven en de COUNT(reactie.id) dus ook altijd 1 opleverd. Ik wil echter alle reacties uit de tabel hebben.
Is dit te realiseren in 1 query en hoe?
Zo niet hoe zorg ik dan dat het resultaat toch in 1 tabel wordt weergegeven m.b.v. een while($rij = mysql_fetch_array($result)) lus?
Volgens mij koppen die hier boven genoemenden ook niet. Omdat er getelt wordt COUNT() waar door GROUP BY moet worden toegevoegt word.
Heb je geen fout melding?? Zoja vermeld die dan met de relevante code, help makkelijker. Is die er niet ontbreekt er goed afhandling van errors.
Maar probeer dit maar eens
<?php
// hoe je ook maar de aan id komt
$id = $get['id'];
// de mysl
$mysql = "
SELECT
on.id,
on.onderwerp,
COUNT( re.id ) AS aantal,
re.onderwerId
re.auteur
FROM
onderwerp AS on,
LEFT JOIN
reactie AS re
ON
on.id = re.onderwerId
WHERE
on.id = '".$id."'
GROUP BY
on.id,
on.onderwerp,
re.auteur,
re.onderwerId
";
?>
Heb hem niet getest(hier nu even geen localhost).
Zou zeggen kijk maar eens naar join, volgens mij kan het niet simpeler. http://www.phphulp.nl/php/tutorial/overig/sql-joins-uitgebreid/479/tot-slot/1120/ ja weet oude tut.
on.id = re.onderwerId komen overeen in beide tabels. Dus de zelde getallen.
Inline view bekijkt eerst na de () dan de rest(Als ik het goed had).
En probeer je mysql ook uit te lijnen leest makkelijker, hellemaal als je met meer mensen werkt.
Ik heb even een aantal foutjes eruit gehaald (komma's en je mag je tabel geen on noemen aangezien dat een reserved word is) en dit kwam er uit en werkte:
SELECT
ond.id,
ond.onderwerp,
COUNT( re.id ) AS aantal,
re.ond_id,
re.auteur
FROM
onderwerp AS ond
LEFT JOIN
reactie AS re
ON
ond.id = re.ond_id
WHERE
ond.id = '3'
GROUP BY
ond.id,
ond.onderwerp,
re.auteur,
re.ond_id
Bedankt want deze is voor mij iig iets begrijpelijker. Die andere query van Aad werkte btw ook ondanks dat er geen GROUP BY in zat. Kreeg hier ook geen errors in phpMyAdmin.
Hier krijg volgens mij niet de laatste reactie maar de eerste.
Ik persoonlijk zou vanuit de reactie tabel werken en dan koppelen met de onderwerp tabel:
SELECT
COUNT(re.id) aantal,
re.auteur,
re.content,
re.post_date redate
ond.onderwerp,
ond.post_date onddate
FROM reacties re
RIGHT JOIN
onderwerpen ond ON ond.id = re.ond_id
GROUP BY
re.ond_id
ORDER BY
redate DESC, onddate DESC
LIMIT 0,10
Deze query geeft de laatse 10 reacties cq posts
Overigens staan er in jouw query te veel velden in de group by