Record niet toevoegen wanneer productnaam en prijs hetzelfde zijn als in database?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Xaboteur X

Xaboteur X

20/03/2012 02:51:59
Quote Anchor link
Hallo allemaal,

Graag zou ik records toevoegen waarvan de combinatie productnaam en prijs niet dezelfde mogen zijn als de combinatie van diezelfde velden van records reeds in de database.

Dus bijvoorbeeld:
(in database) id, product, prijs
1, radio, 14

Dan mag het nieuw record met ook radio, 14 niet worden toegevoegd.

Welke query kan ik hier best voor gebruiken?

Met onderstaande query krijg ik volgende syntax error:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF NOT EXISTS(SELECT id FROM producten WHERE product = 'radio' AND pr' at line 1

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
$insert_product = "
    IF NOT EXISTS(
    SELECT id
    FROM producten
    WHERE product = '{$customProducts[$i]}'
    AND prijs = '{$customPrices[$i]}')
    BEGIN
    INSERT INTO producten
    VALUES ('', '{$customProducts[$i]}', '{$customPrices[$i]}', CURRENT_TIMESTAMP)
    END;";


De query wordt dus uitgevoerd in een for-loop, vanwege meerdere producten in een array.
Gewijzigd op 20/03/2012 02:53:41 door Xaboteur X
 
PHP hulp

PHP hulp

26/04/2024 15:18:39
 
- SanThe -

- SanThe -

20/03/2012 05:34:17
Quote Anchor link
Xaboteur X op 20/03/2012 02:51:59:
... de combinatie productnaam en prijs niet dezelfde mogen zijn ...


Maak die combinatie UNIQUE en er zal nooit iets dubbel in de database komen.
 
Obelix Idefix

Obelix Idefix

20/03/2012 09:41:59
Quote Anchor link
@SanThe:
vermoedelijk (nog) niet goed gezocht, maar hoe kun je een combinatie UNIQUE maken?
 
John D

John D

20/03/2012 09:55:35
Quote Anchor link
create unique index on.....
 
Xaboteur X

Xaboteur X

20/03/2012 11:34:23
Quote Anchor link
Obelix, daar ben ik dus ook nog niet achter.
En een unique index op beide velden is geen optie, want als de combinatie nog niet bestaat, kunnen er meerdere dezelfde producten/prijzen inzitten.
Gewijzigd op 20/03/2012 11:34:58 door Xaboteur X
 
John D

John D

20/03/2012 11:43:32
Quote Anchor link
Xaboteur X op 20/03/2012 11:34:23:
Obelix, daar ben ik dus ook nog niet achter.
En een unique index op beide velden is geen optie, want als de combinatie nog niet bestaat, kunnen er meerdere dezelfde producten/prijzen inzitten.
Vreemde redenering, ik snap bovenstaand niet. Een unique index op de beide elementen bij elkaar is echt je oplossing maar kennelijk snap jij dat weer niet.
create unique index idx1 on producten(product, prijs) creeert een unieke index op de combinatie van beide en dat is waar je naar vraagt. Uiteraard moet je hier een mooie foutafhandeling achter bouwen om te melden dat de insert niet lukt omdat de combinatie al aanwezig is: radio, 14 is reeds aanwezig.
Gewijzigd op 20/03/2012 11:50:24 door John D
 
Erwin H

Erwin H

20/03/2012 12:05:59
Quote Anchor link
Xaboteur X op 20/03/2012 11:34:23:
Obelix, daar ben ik dus ook nog niet achter.
En een unique index op beide velden is geen optie, want als de combinatie nog niet bestaat, kunnen er meerdere dezelfde producten/prijzen inzitten.

Ter verduidelijk wellicht, dus niet twee verschillende indices, maar een index over beide kolommen. Daarmee kunnen er meerder producten met dezelfde naam in staan. Meerdere producten met dezelfde prijs, maar niet twee keer hetzelfde product met dezelfde prijs.
Dat is wat SanThe en John aanvoeren als oplossing en volgens mij is dat ook de oplossing.
 
Xaboteur X

Xaboteur X

20/03/2012 14:02:12
Quote Anchor link
Mijn excuses John D en SanThe, ik wist inderdaad nog niet dat je daarbij meerdere kolommen kon gebruiken.
Bedankt!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.