JeuWeb - Crée ton jeu par navigateur
On duplicate key sur deux colonnes :s - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : On duplicate key sur deux colonnes :s (/showthread.php?tid=3835)

Pages : 1 2


RE: On duplicate key sur deux colonnes :s - wild-D - 02-04-2009

mdr, mysql y s'occupe de ses clés... pas de ses colonnes, la différence vous pourriez essayer de la comprendre ?

quand je vous dis y a plusieurs jours de chercher comment faire une clé multiple, c'est pas pour rien^^

vous faites la différence entre
"de multiples clés"
et
"une clé multiple"

ben mysql aussi il est trop fort, il fait la différence.

entre:
UNIQUE KEY `a` (`a`,`b`),

et
UNIQUE KEY `a` (`a`),
UNIQUE KEY `b` (`b`),


^^ enfin bon si vous voulez être tordu vous pouvez même tenter:
UNIQUE KEY `ab` (`a`,`b`),
UNIQUE KEY `a` (`a`),
UNIQUE KEY `b` (`b`),
normalement mysql sera pas trop regardant sur la normalisation de vos index

edit: lol le copier-coller c'est tabou en en viendra tous à bout Tongue


RE: On duplicate key sur deux colonnes :s - Ruz - 02-04-2009

euh, là, je suis largué, je comprend rien à ton message...
tu peux me le refaire en petit nègre que je comprenne?


RE: On duplicate key sur deux colonnes :s - Findel - 02-04-2009

Je suppose que dans ta requete, tu as a = Coordonnées X, b = Coordonnées Y, c = Type d'unité ?

Si oui, alors il n'y a rien d'illogique à dire que : Il ne peut pas y avoir plusieurs unités du même type sur la même case (X, Y).
Si tu peux dire ça alors tu peux tout à fait mettre comme clé primaire a+b+c et donc ton ON DUPLICATE KEY va fonctionner pour les 3 à la fois.

Edit : pour le message de wild-D, ce qu'il veut dire c'est que tu peux avoir plusieurs cléfs uniques, qui peuvent chacune porter sur plusieurs colonnes.
Exemple :
Clé1, portant sur la colonne a, et Clé2, portant sur la colonne b, indiquent :
- qu'il ne peut y avoir aucun doublon dans la colonne a
- qu'il ne peut y avoir aucun doublon sur la colonne b
en SQL ça s'écrit :
UNIQUE KEY `a` (`a`),
UNIQUE KEY `b` (`b`),

Clé2, portant sur la colonne a ET b, indique qu'il ne peut pas y avoir de doublon de couple
en SQL ça s'écrit
UNIQUE KEY `ab` (`a`,`b`),

On peut également dire les deux à la fois, ce qui a pour effet de cumuler toutes les contraintes : pas deux fois la même valeur dans a, pas deux fois la même valeur dans b et pas deux couples identiques


RE: On duplicate key sur deux colonnes :s - Ruz - 02-04-2009

cool... connaissais pas ce détail, quoique c'est logique au final...
me semblait par contre que le ON DUPLICATE KEY se référait uniquement à la clé primaire: fausse info?


RE: On duplicate key sur deux colonnes :s - Findel - 03-04-2009

Oui et Non : ça marche pour les clés primaires ET les index uniques


RE: On duplicate key sur deux colonnes :s - Ter Rowan - 03-04-2009

Est ce qu'on peut résumer en disant que à chaque fois que le système ne peut pas faire l'insert car "l'enregistrement" existe (au sens une contrainte d'unicité) alors on met à jour l'enregistrement avec les données/calculs qui suivent l'Update


RE: On duplicate key sur deux colonnes :s - Ruz - 03-04-2009

bah, ca résume bien...