blackbrrd Skrevet 15. november 2007 Del Skrevet 15. november 2007 (endret) Du kan bruke: SELECT DISTINCT ON(personid), * FROM oversikt WHERE created LIKE '%$date% ORDER BY personid, date DESC .... ihvertfall i postgres Hvorfor bruker du LIKE til å samenligne datoer? Det er ment å bruke til å sammenligne tekst? Du har vel lagret datoen som en dato i databasen? PS: hvis du skal bruke/vise siste handling til en person ofte så kan dette være en dårlig løsning, og ditt opprinnelige forslag med å lagre hva siste handling var være en bedre ide. Grunnen er at du enten må bruke en aggregat funksjon, sortering, e.l. for å hente ut kun en av mulig flere hendelser, så du vil ende opp med å hente ut alle radene som matcher where clausen, for så å begrense antall rader som blir returnert av distinct on, max, e.l. I postgres så hadde det vært relativt enkelt å gjøre med en after (insert/update/delete) trigger Endret 15. november 2007 av blackbrrd Lenke til kommentar
Manfred Skrevet 15. november 2007 Del Skrevet 15. november 2007 Du KAN bruke LIKE på datoer, men hvor optimalt det er er en annens sak Man bør vel heller bruke datofunksjoner som DATEPART, DATEDIFF osv... Lenke til kommentar
blackbrrd Skrevet 15. november 2007 Del Skrevet 15. november 2007 (endret) Det er da ikke noe problem å sammenligne datoer med >, <, =, >=, <= eller lignende? Vet at LIKE kan bli brukt til å sammenligne hva som helst - ihvertfall alt som går an å gjøre om til tekst, som f.eks datoer Lite effektivt... (ok, det går sikkert an å lage en implementasjon av LIKE som sammenligner datoer, men tviler på at det er implementert sånn...) Endret 15. november 2007 av blackbrrd Lenke til kommentar
Frank2004 Skrevet 15. november 2007 Del Skrevet 15. november 2007 (endret) Hva tenker du på? Kom forresten på nå at jeg ikke har kommet frem til det jeg egentlig lurte på, har ikke funnet ut hvordan jeg skal slette de gamle postene i tabellen oversikt.. så kanskje ikke den beste formuleringen på problemet i hendhold til det jeg la ut som løsning, men en passende formulering på det egentlig problemet. Umm. Leste ikke særlig nøye etter at jeg fikk inntrykk av at du spurte om hjelp til å løse noe annet enn det _egentlige_ problemet ditt. (Er fortsatt ikke overbevist om det, men mulig at en denormalisert løsning virkelig funker best for deg..) Uansett.. Det du spør om er nokså simpelt hvis jeg ikke går glipp av et eller annet her? begin; -- oppdater siste aktivitet en person var med på delete from oversikt where person = $person; insert into oversikt (person, aktivitet) values ($person, $aktivitet); -- oppdater historikk insert into historikk (person, aktivitet, tid) values ($person, $aktivitet, now()); commit; For sikkerhets skyld bør du kanskje lage en unique constraint på person i oversikt også. --- men bør absolutt ikke være nødvendig med koden over.. Evt. kan du greie deg med å finne nyeste rad pr. person i aktivitetstabellen. I så fall bør du nok joine mot persontabellen, ellers kommer du vel ikke unna en full table scan selv om du skulle ha alle indekser for et slikt søk i orden. Endret 15. november 2007 av Frank2004 Lenke til kommentar
Frank2004 Skrevet 15. november 2007 Del Skrevet 15. november 2007 Evt. kan du greie deg med å finne nyeste rad pr. person i aktivitetstabellen. I så fall bør du nok joine mot persontabellen, ellers kommer du vel ikke unna en full table scan selv om du skulle ha alle indekser for et slikt søk i orden. Hmm.. Dette høres rart ut, tror jeg roter nå. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå