/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
MySQL: INSERT WHERE
Fra : Kasper Johansen


Dato : 27-10-05 16:06

Hej gruppe.

Jeg bruger henholdsvis MySQL 3,23 og 4,1.


Er det muligt at lave noget lignende:


INSERT INTO vareliste (vareid, varetitel) VALUES ('1', 'Test') WHERE vareid
!= '1'


Forstået på den måde, at MySQL ikke skal tilføje varen, hvis ID'et allerede
findes. Det er en forholdsvis stor varetabel, og det vil gå ekstremt meget
hurtigere, hvis jeg ikke behøver først at tjekke op på hvilke varer der
allerede findes i databasen.


--
Mvh Kasper Johansen



 
 
Troels Hansen (27-10-2005)
Kommentar
Fra : Troels Hansen


Dato : 27-10-05 17:45

Kasper Johansen wrote:

> INSERT INTO vareliste (vareid, varetitel) VALUES ('1', 'Test') WHERE vareid
> != '1'

Du skal bruge
UPDATE `vareliste` SET `vareid` = '1', `varetitel` = 'Test' WHERE
`vareid` != 1

mvh Troels Hansen

Kasper Johansen (27-10-2005)
Kommentar
Fra : Kasper Johansen


Dato : 27-10-05 20:54

"Troels Hansen" <idle@invalid.email> skrev i en meddelelse
news:43610484$0$41137$14726298@news.sunsite.dk...
>> INSERT INTO vareliste (vareid, varetitel) VALUES ('1', 'Test') WHERE
>> vareid != '1'
>
> Du skal bruge
> UPDATE `vareliste` SET `vareid` = '1', `varetitel` = 'Test' WHERE `vareid`
> != 1

Som sagt ønsker jeg ikke at opdatere et allerede oprettet produkt. Problemet
er at nogle af de produkter har værdien "standard_del" sat til 1, og den må
ikke overskrives. Det samme produkt må heller ikke optræde to gange.

Jeg ønsker kun at indsætte produktet det sted, hvor der ikke eksistere et
allerede oprettet produkt af samme type.

UPDATE vil kun påvirke de produkter der allerede ligger. Jeg skal heller
ikke ændre information men tilføje.


--
Mvh Kasper Johansen



Torben Borre Larsen (27-10-2005)
Kommentar
Fra : Torben Borre Larsen


Dato : 27-10-05 21:20

"Kasper Johansen" <kasper@johansen.tdcadsl.dk> den 27. oktober 2005 kl.
17:05 +0100 skrev:
>INSERT INTO vareliste (vareid, varetitel) VALUES ('1', 'Test') WHERE
>vareid
>!= '1'

Det må vile være:
.... Where vareid = null (altså ikke findes i tabellen vareliste).
eller
.... Where isnull(vareid)
--
Venlig hilsen
Torben Borre Larsen
[torben@dui.dk] [www.dui.dk]


Jens Gyldenkærne Cla~ (27-10-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 27-10-05 22:12

Torben Borre Larsen skrev:

> Det må vile være:
> ... Where vareid = null (altså ikke findes i tabellen

Null-sammenligninger foretages ikke med =-operatoren.

> ... Where isnull(vareid)

Det giver mere mening - bortset fra at man ikke kan angive et
kriterium til en INSERT.

I standard sql kan man ikke løse det problem Kasper stiller op med
en enkelt sql-sætning. Der er to måder at håndtere det på - enten
tjekker man først om id-værdien findes i tabellen og kører kun
INSERT-forespørgslen hvis værdien ikke findes. Eller også forsøger
man at indsætte værdien, og bruger fejlhåndtering til at håndtere
tilfældet hvor id-værdien findes i forvejen (det forudsætter så at
der er en databaseconstraint der sikrer unikke værdier i feltet).

I MySQL 5 kan man bruge INSERT med ON DUPLICATE KEY UPDATE ... - så
forespørgslen altså fungerer som "Opret en post med id X, eller
opdater den eksisterende hvis den findes".
Man kan også benytte IGNORE til at undertrykke en fejlmeddelelse
hvis id-nummeret findes i forvejen - men da IGNORE så vidt jeg kan
se også undertrykker andre fejlmeddelelser, virker det ikke som en
specielt god ide at benytte den.

Jeg har ikke selv noget stort kendskab til mysql, så jeg ved ikke
om de nævnte funktioner alene findes i version 5, eller om nogen af
dem er med i tidligere udgaver. Tjek evt. selv manualen.
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Torben Borre Larsen (27-10-2005)
Kommentar
Fra : Torben Borre Larsen


Dato : 27-10-05 23:48

<jgc_nospam@dmf.dk> den 27. oktober 2005 kl. 23:11 +0100 skrev:
>Null-sammenligninger foretages ikke med =-operatoren.
Tak - ja., så blev jeg alligevel en lile smule klogere -:)

>Jeg har ikke selv noget stort kendskab til mysql, så jeg ved ikke
>om de nævnte funktioner alene findes i version 5, eller om nogen af
>dem er med i tidligere udgaver. Tjek evt. selv manualen.
Jeg eg har heller igen kendskab, - og har ingen DataBaser elller
InternetSider kørende - men som du selv er en smule inde på, - så holder
jeg mig tilbage fra mySQL ud fra de mange forskelige versioner - og om man
så kan "bruge skidtet " i Haderlsev, Aarhus elller Ribe.......
--
Venlig hilsen
Torben Borre Larsen
[torben@dui.dk] [www.dui.dk]



Kim Andersen (28-10-2005)
Kommentar
Fra : Kim Andersen


Dato : 28-10-05 11:50

> INSERT INTO vareliste (vareid, varetitel) VALUES ('1', 'Test') WHERE
vareid != '1'
>
> Forstået på den måde, at MySQL ikke skal tilføje varen, hvis ID'et
allerede
> findes. Det er en forholdsvis stor varetabel, og det vil gå ekstremt meget
> hurtigere, hvis jeg ikke behøver først at tjekke op på hvilke varer der
> allerede findes i databasen.
>

Hvis 'vareid' er unik, kan den ikke sættes ind igen. Så er det vel at tokle
fejlen hvis der kommer en fejl og skrive at vare findes allerede.

/Kim



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408923
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste