allo
ik heb een vraagje:
bv ik heb in een tabel forum_posts
dit staan

ID - - - - - - - - - - - hoort_bij - - - datum
5 - - - - - - - - - - - - 2 - - - -- - - - 05/09/06
6 - - - - - - - - - - - - 2 - - - -- - - - 06/09/06

en ik wil alles appart houder per 'hoort_bij' dus gebruik ik GROUP BY en ik wil ook degene uitkomen die het nieuwste is gepost in die tabel:

SELECT * FROM 'forum_posts' GROUP BY 'hoort_bij' ORDER BY 'datum' DESC

maar dan kom ik query ID 5 uit
kan iemand mij helpen?
Blijkbaar sorteer je nu ASC (ascending => oplopend), wil je aflopend sorteren (descending) dan heb je DESC nodig.

en wat moet ik doen als ik dit nu heb :
ID - - - - - - - - - - - hoort_bij - - - datum
5 - - - - - - - - - - - - 2 - - - -- - - - 2006-09-05
6 - - - - - - - - - - - - 3 - - - -- - - - 2006-09-06
7 - - - - - - - - - - - - 3 - - - -- - - - 2006-09-07
8 - - - - - - - - - - - - 2 - - - -- - - - 2006-09-08

welke query moet ik dan doen om dit uit te komen:


8 - - 2006-09-08
7 - - 2006-09-07


als ik dit doe via
SELECT * FROM forum_post GROUP BY 'hoort_bij' ORDER BY 'datum' DESC;

dan krijg ik deze results

6 - - - - - - - - - - - - 3 - - - -- - - - 2006-09-06
5 - - - - - - - - - - - - 2 - - - -- - - - 2006-09-05

en ik moet juist de 2 andere hebben want die zijn nieuwer (voor Last post in een forum)
'hoort_bij' en 'datum' zijn kolomnamen. Deze horen dus niet (!) tussen quotes, of andere rommel, te staan. Doe je dat wel, dan behandel je dit als een string en wordt er dus niet gesorteerd op de waardes die in de kolom staan.

SELECT 
  * 
FROM 
  forum_post 
GROUP BY 
  hoort_bij
ORDER BY 
  datum DESC;
Oh, je bedoelt dat de datums niet kloppen die bij de resultaten staan? Dat heb je te danken aan MySQL, die gebruikt GROUP BY niet op de juiste manier.

Wellicht is het gebruik van het * in de query het probleem, haal uitsluitend de gewenste informatie op (benoem de velden) en gebruik evt. een subquery.

Ik weet niet of dit de oplossing is. Een echte oplossing is een betere database te gebruiken, bv. PostgreSQL.
er moet toch een oplossing zijn in MySQL ik heb een betalende host met MySQL :s
Even wat uitleg over GROUP BY:
GROUP BY biedt de mogelijkheid objecten die door rijen in een tabel worden beschreven, aan de hand van bepaalde met elkaar overeenkomende eigenschappen als 1 groep te beschouwen en over deze groepen vragen te stellen. De groep wordt daarmee op zichzelf ook weer een object met eigenschappen.

Van zo'n groep mag in het resultaat van de query alleen iets worden opgenomen dat de groep als geheel beschrijft.

Dan jouw probleem: Jij wilt de meest recente datum opvragen van een record die in 1 groep staat. Dat kan dus nooit met de huidige query omdat de datum geen eigenschap van de hele groep, maar slechts van 1 record.

MySQL accepteert deze foute query helaas wel. Dat de uitkomst niet klopt, zal MySQL een rotzorg zijn...

Ik zal even in het probleem duiken en zoeken naar een oplossing.

Vraagje: Welke versie van MySQL gebruik je/gebruikt jouw hosting provider?
De query van Jan is bijna goed, hier de gecorrigeerde versie:

SELECT
    hoort_bij,
    MAX(datum) AS laatste_datum
FROM
    tabelnaam
GROUP BY 
    hoort_bij
ORDER BY 
    laatste_datum DESC,
    hoort_bij ASC

Het id kun je dus niet opvragen! Wanneer je dat wel wilt, zul je met een subquery moeten gaan werken.
gaat ook niet , ik wil gewoon dat die GROUP BY de laatste datum pakt en niet degene die hij het eerste tegenkomt :s
MIschien moet je anders even lezen wat FRank daarboven geschreven heeft. MYSQL doet maar wat met betrekking tot GROUP BY.

Let op GROUP BY

vroeger voor GROUP BY.

//ivm uitlijning
naam   euries
klaas       3
jan          3
klaas       1

SELECT naam,SUM(euries) AS TOTAAL FROM tabel

klaas       7
jan          7
klaas       7


Nu met group by
SELECT naam,SUM(euries) AS TOTAAL FROM tabel GROUP BY naam

klaas       4
jan          3

Daar is GROUP BY voor en niet voor wat jij wilt. Dus GROUP BY wordt gebruikt icm een BEREKEND gegevens item, oftewel iets wat niet rechtstreeks uit de tabel komt.
Daarvoor gebruik je namelijk WHERE

Reageren