Problem med MySQL GROUP BY
Database: MySQL 4.Hej,
Jeg ønsker at vælge noget indhold (tabel: content) og samtidig tilknytte personen, der har oprette indholdet. Jeg har en tabel med alle ændringer foretaget på indholdet (tabel: contenttracking) og skal bare vælge den første dato. Samtidig ønsker jeg at tilknytte en bruger til oprettelsen.
Mit problem er, at den korrekte dato vælges, men at brugeren tilknyttet datoen ikke nødvendigvis vælges (har oplevet begge dele?).
Jeg tror det hænger sammen med min brug af GROUP BY. Jeg benytter min() til at finde datoen i tabel: contenttracking. Det virker som om, at den ikke nødvendigvis vælger alle data fra samme række som den valgte dato.
Problemet er noget komplekst og svært at beskrive. Jeg har lavet en oversigt over tabellerne og nogle eksempler der beskriver mit problem (eksempel 1).
Håber nogen kan hjælpe.
Mvh.
Reimers
Oversigt over tabeller
Tabel: Content
=======================================
IDcontent
---------------------------------------
329
=======================================
Tabel: Records
=======================================
IDrecord name
---------------------------------------
17 admin
24 Gæst
=======================================
Tabel: Contenttracking
=======================================
IDcontent IDrecord time
---------------------------------------
329 17 2005-05-29 13:46:49
329 24 2005-05-29 20:33:57
=======================================
Eksempel 1
SELECT contenttracking.IDrecord AS IDuser, records.name AS name, content.IDcontent AS IDcontent, min( contenttracking.time ) AS time
FROM (
content
RIGHT JOIN (
contenttracking
INNER JOIN records ON contenttracking.IDrecord = records.IDrecord
) ON content.IDcontent = contenttracking.IDcontent
)
GROUP BY content.IDcontent, IDuser
Resultat:
============================================
IDcontent IDuser name time
--------------------------------------------
329 24 Gæst 2005-05-29 13:46:49
============================================
Den vælger korrekt dato, men forkert bruger.
Eksempel 2
Ved at benytte GROUP BY med IDuser fåes følgende.
SELECT contenttracking.IDrecord AS IDuser, records.name AS name, content.IDcontent AS IDcontent, min( contenttracking.time ) AS time
FROM (
content
RIGHT JOIN (
contenttracking
INNER JOIN records ON contenttracking.IDrecord = records.IDrecord
) ON content.IDcontent = contenttracking.IDcontent
)
GROUP BY content.IDcontent, IDuser
Resultat:
============================================
IDcontent IDuser name time
--------------------------------------------
329 17 admin 2005-05-29 13:46:49
329 24 Gæst 2005-05-29 20:33:57
============================================
Her er tilknytningen mellem dato og bruger korrekt...