Avatar billede reimers Nybegynder
02. juni 2005 - 19:22 Der er 1 kommentar og
1 løsning

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...
Avatar billede reimers Nybegynder
04. juni 2005 - 14:21 #1
Lige en rettelse til Eksempel 1, hvor der netop ikke skulle stå "GROUP BY..., IDuser", men kun GROUP BY content.IDcontent
Avatar billede reimers Nybegynder
04. juni 2005 - 14:54 #2
Da jeg har indskrænket problemet væsentligt lukker jeg denne tråd og opretter et nyt spørgsmål med titlen: MySQL problem med GROUP BY og min()
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester