21. oktober 2008 - 16:02Der er
8 kommentarer og 1 løsning
Udtræk af non group by kolonner fra 2 tabeller
Jeg har 2 tabeller, som på en eller anden måde skal samles og trækkes data ud fra. Mit store problem, er at jeg skal have kolonner ud, som ikke er i GROUP BY, og hvordan det skal klares, kan jeg ikke lige gennemskue. Jeg har rodet rundt med group by, fordi jeg skal trække den højeste revision ud for et tilbud.
Fra tabellen tilbud skal jeg have tilbud (tilbudsnummer) og rev (revision) ud.
Fra tabellen tilbud0 skal jeg have felterne tilbudsnummer (svarer til tilbud.tilbud), r9 m.fl.
Altså skal jeg have joinet de 2 tabeller, fundet max af revision for hvert tilbud, og trukket data ud, som er f.eks. non group by.
MySQL versionen er 4.1.7, så views er ikke en mulighed.
Faktisk tillader MySQL at man angive andre kolonner end aggregrede funktioner og group by kolonner - saa tager MySQL tilfaeldige raekker for de andre - men hvem pokker er interesseret i tilfaeldige data.
Jeg tror at du skal satse paa noget lignende:
SELECT tilbud.tilbudsnummer,tilbud.rev,tilbud0.tilbudsnummer,tilbud0.r9 FROM tilbud t1,tilbud0 WHERE tilbud.tilbudsnummer=tilbud0.tilbudsnummer AND rev = (SELECT MAX(rev) FROM tilbud t2 WHERE t2.tilbudsnummer=t1.tilbudsnummer)
Kan se at jeg fik skrevet noget forkert i formuleringen. Tilbudsnummer svarer ikke til tilbud.tilbud, men derimod tilbud.id...
Jeg er dog kommet en løsning lidt nærmere, men er der nogen mulighed for at genbruge et udtræk i selv samme query?
SELECT tilbudsnummer, r9, (SELECT MAX(rev) FROM tilbud WHERE tilbud = ".$foo['tilbud'].") AS maxREV, (SELECT id FROM tilbud WHERE tilbud = ".$foo['tilbud']." ORDER BY rev DESC LIMIT 0,1) AS id FROM tilbud0 WHERE tilbudsnummer =
tilbudsnummer til sidst skal være lige med det id jeg trækker ud via (SELECT id FROM tilbud WHERE tilbud = ".$foo['tilbud']." ORDER BY rev DESC LIMIT 0,1), men er det muligt?
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.