Gå til innhold

Sette inn/oppdater til to tabeller (oversikt/historie)


Anbefalte innlegg

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 av blackbrrd
Lenke til kommentar
Videoannonse
Annonse

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 av blackbrrd
Lenke til kommentar
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 av Frank2004
Lenke til kommentar
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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...