Record niet toevoegen wanneer productnaam en prijs hetzelfde zijn als in database?
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)
1
2
3
4
5
6
7
8
9
10
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;";
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
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.
vermoedelijk (nog) niet goed gezocht, maar hoe kun je een combinatie UNIQUE maken?
create unique index on.....
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
Xaboteur X op 20/03/2012 11:34:23:
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.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.
En een unique index op beide velden is geen optie, want als de combinatie nog niet bestaat, kunnen er meerdere dezelfde producten/prijzen inzitten.
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
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.
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.
Bedankt!