Avatar billede morten_s Nybegynder
11. marts 2002 - 13:31 Der er 9 kommentarer og
2 løsninger

Undgå dubletter

Jeg har en Alarmdatabase, hvor jeg gemmer alarmer
tabellen består af følgende

Id Int
AlDate  VarChar20
AlTime  VarChar8
AlTekst VarChar40

Alarmerne hentes 1. per minut via et serielt interface og jeg får de 50 sidste alarmer med tilbage hvergang

Det som skal skrues sammen er et WHERE Statement som gør at jeg undgår dubletter

INSERT INTO AlTable (Id, AlDate, AlTime, AlTekst) Values (......) WHERE ???????

Avatar billede thomashove Nybegynder
11. marts 2002 - 13:57 #1
hmmm - du kan aldrig sige "Where" i en Insert....

det du skal sikre dig er at du ikke indsætter en ny tubel med en nøgle der allerede eksisterer i databasen. I dit tilfælde kunne jeg forestille mig at din nøgle er feltet "id".

derfor kunne du gøre det at du først selectede på Max id (og derved får den højedste id i databasen) lægger en til denne og derefter laver din Insert med denne nye id
Avatar billede morten_s Nybegynder
11. marts 2002 - 14:04 #2
Thomas> Nej det hjælper mig ikke, jeg skal undgå at lægge en alarm ned i DB'en som jeg allerede har gemt
Altså hvis der eksistere en identisk alarm i DB en må jeg ikke gemme den igen, en identisk alarm er en som har samme AlTid, AlDate og AlTekst som den jeg vil gemme
Avatar billede thomashove Nybegynder
11. marts 2002 - 14:11 #3
så har du to muligheder : styre det selv eller lade databasen styre det...

1) her laver du en select på alle de tubler der passer dine kriterier

SELECT * from AlTable WHERE AlDate=$ALdate AND AlTime=$AlTime AND AlTekst=$AlTekst

hvis du ikke får nogle resultater kan du sætte den nye ind...

2) Lad alle felterne i databasen være nøgler. Hermed vil databasen ikke tillade endnu en tubel med de samme værdier or dermed returnere fejl
Avatar billede morw Nybegynder
11. marts 2002 - 14:46 #4
REPLACE INTO ...
Avatar billede morten_s Nybegynder
11. marts 2002 - 15:47 #5
morw kan du ikke udybe lidt nærmere, hvad hvis alarmen ikke er i db'en bliver den så oprettet ?
Avatar billede morw Nybegynder
11. marts 2002 - 15:51 #6
Læs afsnittet i mysql docs, men ja til dit spørgsmål.
Avatar billede tipsen Nybegynder
12. marts 2002 - 13:13 #7
Kan du ikke oprette et unikt indeks i tabellen - så kan du ikke oprette identiske poster!
Avatar billede morten_s Nybegynder
12. marts 2002 - 13:15 #8
jeg har anvendt løsningen fra Thomas

tak for interessen
/Morten
Avatar billede tipsen Nybegynder
12. marts 2002 - 14:09 #9
Hvis du laver et unikt indeks over de ønskede felter:

ALTER TABLE alarmtabel ADD UNIQUE indexNavn (AlTid,AlDate,AlTekst);

Vil tabellen ikke acceptere dubletter over de angivne felter - så slipper du for de andre høkerløsninger...
Avatar billede thomashove Nybegynder
12. marts 2002 - 14:46 #10
tipsen -> prøv at kigge på min løsning 2 (den ligner jo lidt din seneste kommentar, gør den ikke...)
Avatar billede tipsen Nybegynder
12. marts 2002 - 17:20 #11
Det er korrekt, at den ligner, men da den ikke er uddybet gik jeg ikke udfra at det var den udgave der blev benyttet!
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