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?
Aad B op 30/01/2012 20:21:32

[quote="- SanThe - op 30/01/2012 20:18:40"]
Dit: SELECT MAX(id) kan toch maar één record opleveren?
Alleen wannneer id uniek is in de reactie tabel en dat wordt hier nergens gesteld. Je doet dus een aanname.[/quote]
Geef dan aub eens een voorbeeld van een tabel waarin deze query meer dan 1 record oplevert:

SELECT MAX(id) FROM reactie WHERE ond_id = 3

Erwin H op 30/01/2012 20:36:42

[quote="Aad B op 30/01/2012 20:21:32"]
[quote="- SanThe - op 30/01/2012 20:18:40"]
Dit: SELECT MAX(id) kan toch maar één record opleveren?
Alleen wannneer id uniek is in de reactie tabel en dat wordt hier nergens gesteld. Je doet dus een aanname.[/quote]
Geef dan aub eens een voorbeeld van een tabel waarin deze query meer dan 1 record oplevert:

SELECT MAX(id) FROM reactie WHERE ond_id = 3
Excuus, te snel gereageerd, levert inderdaad maar 1 record op!

[/quote]

Ben ik met je eens en ik stel elke hulp op prijs maar we dwalen af. Is het mogelijk de laatste reactie en het totaal aantal reacties in 1 querie te krijgen? Zo niet hoe krijg ik dan 2 query's in 1 tabel d.m.v een while lus?

@Aad B: je zal gelijk hebben met je GROUB BY maar dit lost het probleem niet op...
Ga het niet in php processen, de meest gemaakte bagger in php is allerlei data ophalen uit MySQL en dat processen in array's in php :(
In een andere SQL database los ik dat op met een inline view, volgens mij kan MySQL dat ook:

SELECT onderwerp.id, 
       onderwerp.onderwerp, 
       reactie.auteur,
       cnt.aantal
 FROM  onderwerp, 
       reactie,
      (select COUNT( reactie.id ) as aantal from reactie) cnt
WHERE onderwerp.id = reactie.ond_id
  AND reactie.id IN (SELECT MAX(id) FROM reactie WHERE ond_id = 3)
ORDER BY onderwerp.id DESC 

hmm dit levert iig een aantal op wat groter is dan 1 maar dit geeft het totaal aantal reacties weer van alle onderewerpen en niet per onderwerp. Ondanks dat ik je query niet begrijp (die 2de SELECT tussen FROM en WHERE) heb ik hem aangepast zodat het nu per onderwerp wordt weergegeven:

SELECT onderwerp.id, onderwerp.onderwerp, reactie.auteur, cnt.aantal
FROM onderwerp, reactie, (

SELECT COUNT( reactie.id ) AS aantal
FROM reactie
WHERE ond_id =3
)cnt
WHERE onderwerp.id = reactie.ond_id
AND reactie.id
IN (

SELECT MAX( id )
FROM reactie
WHERE ond_id =3
)
ORDER BY onderwerp.id DESC 


Bedankt!
p.s. ik zal me is verdiepen in inline view...
Het lijkt mij dat dit simpeler kan:

SELECT onderwerp.id,
       onderwerp.onderwerp,
       reactie.auteur,
       cnt.aantal
 FROM  onderwerp,
       reactie,
      (select COUNT( reactie.id ) as aantal from reactie) cnt
WHERE onderwerp.id = reactie.ond_id
  AND reactie.id IN (SELECT MAX(id) FROM reactie WHERE ond_id = 3)
  AND reactie.ond_id =3
ORDER BY onderwerp.id DESC 
LIMIT 1

blijkbaar niet want dit geeft toch nog het totaal aantal reacties weer.
LIMIT moet dan wellicht zijn: LIMIT 1,1
[edit]
Ben niet zo thuis in LIMIT, mijn database kent dit niet.
LIMIT 1,1 geeft geen resultaten terug. Maar zoals ik het opgelost heb is het toch ook prima?
Jan Horden op 30/01/2012 22:37:26

LIMIT 1,1 geeft geen resultaten terug. Maar zoals ik het opgelost heb is het toch ook prima?
Ja, is SQL technisch een prima oplossing.

Reageren