Avatar billede starfish Nybegynder
07. august 2001 - 09:55 Der er 12 kommentarer og
1 løsning

INSERT kun hvis en post ikke findes i forvenej!

Hejsa! jeg har en tabel der holder styr på hvilke brugere, der abbonerer på hvilke services.

Tabellen består af \"brugerid, serviceid\"
hvis f.eks. \"bruger18\" vil abonnere på \"service4\" vil jeg add\'e et row, der siger det. MEN da det er en server med mange brugere vil jeg gerne optimere lidt mht. performancen.

Kan det lade sig gøre kun at indsætte såfremt der ikke allerede findes en post, der linker \"bruger18\" til \"service4\"

Avatar billede starfish Nybegynder
07. august 2001 - 09:55 #1
forvenej! = forvejen :-)
Avatar billede lauer Nybegynder
07. august 2001 - 10:11 #2
INSERT INTO (bruger, service) tabel (\'$bruger\', \'$service\') WHERE bruger =! \'$bruger\' AND service =! \'$service\'
det er ikke testet... men det er i hvert fald noget i den stil
Avatar billede lauer Nybegynder
07. august 2001 - 10:15 #3
UPS!... det er vist sådan her.
INSERT INTO (bruger, service) table (\'$bruger\', \'$service\') WHERE bruger <> \'$bruger\' AND service <> \'$service\'
Avatar billede morw Nybegynder
07. august 2001 - 10:19 #4
Du kan ikke bruge WHERE i en INSERT

Kig på REPLACE i stedet for INSERT.
Avatar billede starfish Nybegynder
07. august 2001 - 10:23 #5
Kan ikke lige få det til at virke :-(
Avatar billede starfish Nybegynder
07. august 2001 - 10:25 #6
Det lader til at REPLACE gjorde tricket, takker!
Avatar billede lauer Nybegynder
07. august 2001 - 10:26 #7
nå nej...  :)
men han kan da lave det med 2 querys...
først en som der tjekker om han er der, og en som indsætter i tabellen hvis han ikke er.
Avatar billede starfish Nybegynder
07. august 2001 - 10:38 #8
Nå, der står godtnok på mysql.com at REPLACE burde virke, men det gør det ikek alligevel i mit tilfælde...

:-(

Any ideas why?
REPLACE INTO tidb_user_kommune (username, kommune) VALUES (\'$username\', \'$id\')
Avatar billede starfish Nybegynder
07. august 2001 - 10:52 #9
machomann>

Det er det jeg gør p.t, men pga optimering ville det være smart hvis jeg kunne nøjes med ét mysql kald.
Avatar billede morw Nybegynder
07. august 2001 - 11:30 #10
Hvordan ser din tabel ud - giv os lige et dump
Avatar billede starfish Nybegynder
07. august 2001 - 11:34 #11
username    kommune
soeje          271 
splatterhans    8 
splatterhans    3 
123            8 
soeje          164 
123            1 

Avatar billede morw Nybegynder
07. august 2001 - 11:38 #12
Det var nu ikke indholdet, men så vidt jeg kan se kræver REPLACE et unique index, så det vil nok ikke virke hos dig.

Så det hurtigste er nok:

1.

DELETE FROM tidb_user_kommune WHERE username = \'$username\' AND kommune = \'$id\'

2.

INSERT INTO tidb_user_kommune (username, kommune) VALUES (\'$username\', \'$id\')

Avatar billede starfish Nybegynder
07. august 2001 - 11:46 #13
ja, det må vel være hurtigere at slette posten først, istedet for at checke om den findes og i givet fald undlade at inserte. Det vil jeg gøre. Mange tak!
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