21. maj 2010 - 14:25Der er
4 kommentarer og 1 løsning
Finde record med seneste revision
Jeg har en tabel indeholder bl.a. id, tilbud (nr) og rev (revision)
Hvordan får jeg lavet en select der henter alle ud records men seneste revision ud?
Hvis jeg bare group by tilbud og max (rev) er jeg jo ikke sikker på at få det rigtige id.
Mit helt store problem, er at jeg skal have omformet nedenstående query, så den er dynamisk alt efter om brugeren vil se alle revisoiner af et tilbud eller kun den seneste revision.
SELECT t.tilbud, t.rev, t1.tilbudsnummer, t1.r2, UNIX_TIMESTAMP(t5.r526d) AS r526d, UNIX_TIMESTAMP(t5.r526b) AS r526b, t1.r9, t1.r18, t5.r504, t.status, k.navn1, t1.r14, t1.r1, t5.r504, t5.r526a, t5.r526c, (TO_DAYS(t5.r526d)-TO_DAYS(NOW())) AS datemark, t.ordre AS ordrenr FROM tilbud AS t, tilbud0 AS t1 LEFT JOIN kunde AS k ON t1.r14=k.id LEFT JOIN tilbud5 AS t5 ON t1.tilbudsnummer=t5.tilbudsnummer WHERE t1.tilbudsnummer=t.id && (t5.r526a='1') $search ORDER BY $sort, t.id ASC
En tabel har følgende felter ID - primær nøgle tilbud - tilbudsnummeret rev - revisionsnummer
Bliver der lavet en ny revision af tilbuddet, bliver der oprettet en ny record, hvor rev er 1 nummer højere end max(rev) for tilbuddet.
Det vil sige der ikke findes et felt, der entydigt siger om tilbuddet har en nyere revision.
Mit problem, er at jeg ikke lige kan gennemskue hvordan jeg får returneret kun den seneste revision af hvert tilbud. Jeg har roddet med noget inner join, men har ikke fundet løsningen, men det kan også være det ikke kan lade sig gøre via inner join.
det lyder som en dum måde. kan du ik hellere lave et felt der hedder date og så sortere ud fra det.
SELECT * FROM tabel WHERE rev = '$rev' ORDER BY date DESC
så har du datoen til at sortere hvad er nyest.
det tal + 1 er rimlig ledt at sortere i - skal det så være højere eller lavere end hvor meget osv.. og konflikter det med de andre.. langt nemmere med dato.
Det vil jo stadig kræve at jeg efterfølgende lavede en ny query, til at fjerne de "gamle" tilbud...
Men tror jeg selv har fundet en løsning nu:
Jeg finder den højeste revision for hvert tilbud, og joiner så dette med selvsamme tabel, hvor krævet så bare er at tilbudsnumrene skal være ens og revisionerne skal være ens.
select tilbud.* from tilbud inner join (SELECT tilbud.tilbud, Max(rev) AS maxrev FROM tilbud GROUP BY tilbud.tilbud) as tmp on tilbud.tilbud = tmp.tilbud and tilbud.rev = tmp.maxrev
Så skal jeg abre have det flettet ind i den oprindelige query
Synes godt om
Ny brugerNybegynder
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.