Avatar billede Tampico Praktikant
23. februar 2006 - 11:41 Der er 4 kommentarer og
1 løsning

Sidste post i en join

Hejsa,

Jeg har et problem hvor jeg skal joine to tabeller. Den ene indeholder sendinger og den anden en historik over statusen. Der kan derfor godt være mange statuser til hver sending

Jeg ønsker derfor et udtræk hvor jeg får alle sendinger, og derefter den sidste status på hver sending. Jeg har iøjeblikket følgende udtryk:

SELECT MAX(trace.statustekst) as status, gxtabel.Fmnr FROM trace LEFT JOIN gxtabel on gxtabel.Fmnr = trace.Fmnr where gxtabel.Exnr=" .$exnr. " group by gxtabel.Fmnr"

Bruger jeg funktionen MAX, får jeg kun sorteret efter alfabetisk orden, og ikke sidste status.

Hjælp ønskes !!!
Avatar billede arne_v Ekspert
23. februar 2006 - 17:42 #1
naar du ikke har en ORDER BY saa maa databasen returnere data i den orden som den har lyst til

saa put en ORDER BY paa
Avatar billede Tampico Praktikant
23. februar 2006 - 19:11 #2
Hvis jeg putter "order by trace.id" på i enden, hvor id er auto_numeric, så får jeg sortering på den tabel jeg har brugt "group by" på - altså sendingstabelen. Det jeg ønsker var jo at få sortering på statustabelen, men det lader sig umildbart kun gøre når jeg bruger en funktion efter "select"

Der må da være en løsning på dette problem ???
Avatar billede _darkstar_ Nybegynder
25. februar 2006 - 01:22 #3
SELECT MAX(trace_a.id), trace_b.id, trace_b.statustekst AS status
FROM trace AS trace_a,  trace AS trace_b, gxtabel
WHERE gxtabel.Exnr = <noget>
  AND gxtabel.Fmnr = trace_b.Fmnr
GROUP BY status, trace_b.id
HAVING MAX(trace_a.id) = trace_b.id

Ovenstående er ikke testet, men jeg har afprøvet princippet på en mysql-databse og det virker. Idéen er at joine trace-tabellen med sig selv og bruge HAVING-delen til at vælge de rækker fra, som ikke er de nyeste. Put selv en ORDER BY på i enden, hvis du gerne vil have det.
Avatar billede Tampico Praktikant
25. februar 2006 - 18:46 #4
Fungerer ikke. Svartiden bliver op til 10 sek. og resultatet bliver helt forkert. Desuden kan man jo forestille sig at der ikke er nogen status til sendingen, og denne vil ikke blive vist hvis ikke man bruger LEFT JOIN. Men det lyder jo underligt hvis man er nød til at lave to SQL-udtryk for at løse dette problem ???
Avatar billede Tampico Praktikant
28. august 2008 - 10:49 #5
Lukker
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