JeuWeb - Crée ton jeu par navigateur
[Resolu] SQL: de l'UPDATE à l'INSERT - 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 : [Resolu] SQL: de l'UPDATE à l'INSERT (/showthread.php?tid=6639)

Pages : 1 2


RE: SQL: de l'UPDATE à l'INSERT - zneman - 12-02-2013

Après avoir suivi tes instructions, je me retrouve avec la table:

CREATE TABLE IF NOT EXISTS `t_troupe` (
`PK_troupe` int(11) NOT NULL AUTO_INCREMENT,
`FK_joueur` int(8) NOT NULL,
`FK_cTroupe` int(3) NOT NULL,
`nombre` int(11) NOT NULL,
`type` set('0','1') NOT NULL COMMENT '0=defense, 1=attaque',
PRIMARY KEY (`PK_troupe`),
UNIQUE KEY `FK_joueur` (`FK_joueur`,`FK_cTroupe`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=20 ;

Et j'obtiens malheureusement:

debug : #1062 - Duplicate entry '1-2' for key 'FK_joueur'{"success":false,"error":"
#1062 - Duplicate entry '1-2' for key 'FK_joueur'<\/div>"}

Je sent que cette fonction va être bien chiante à utiliser sur des gros scripts ^^

Merci encore pour l'aide apporté, bonne nuit (j'en peux plus de me prendre la tête là dessus).


RE: SQL: de l'UPDATE à l'INSERT - Holy - 12-02-2013

(12-02-2013, 12:41 AM)zneman a écrit : Et j'obtiens malheureusement:

debug : #1062 - Duplicate entry '1-2' for key 'FK_joueur'{"success":false,"error":"
#1062 - Duplicate entry '1-2' for key 'FK_joueur'<\/div>"}
Si jamais ta table peut être vidé, vide là et recommence tes tests.

En gros, l'erreur te dit : "Il y a une duplication de la double clé unique dans plusieurs des enregistrements". Tu dois avoir deux lignes qui ne respectent pas les règles que tu veux imposer à ta table, à savoir que toute ligne ne peut avoir deux fois les mêmes FK_joueur et FK_cTroupe (ton double index).

Tu aurais la même erreur si tu voulais ajouter une clé primaire sur un champ d'une table déjà remplie dont plusieurs lignes auraient une même valeur pour le champ indexé. C'est une erreur tout à fait normale.


RE: SQL: de l'UPDATE à l'INSERT - zneman - 12-02-2013

Table vidée, tests effectués en ligne comme en local !

test donc à vide avec:

Code :
INSERT INTO t_troupe (FK_joueur, FK_cTroupe, nombre, type)
VALUES (9, 2, 200, '0')
ON DUPLICATE KEY UPDATE
FK_joueur = 9 AND FK_cTroupe = 2;

J'ai bien une ligne qui se fait, avec les bonnes valeurs !
Maintenant, je lance la requète sur le même type de troupe (PK_cTroupe) et sur le même joueur (FK_joueur). La ligne existe déjà, je veux simplement qu'elle modifier le nombre de la troupe, de 200 à 300:

Code :
INSERT INTO t_troupe (FK_joueur, FK_cTroupe, nombre, type)
VALUES (9, 2, 300, '0')
ON DUPLICATE KEY UPDATE
FK_joueur = 9 AND FK_cTroupe = 2;

Citation :1 ligne insérée.
Identifiant de la ligne insérée : 9 ( Traitement en 0.0003 sec )

Il ne m'a donc pas modifié la première ligne, mais en a ajouté une seconde :bave:
Même résultat en ligne comme en local.
Ma base contient bien une PK en AI ainsi qu'un double index unique.

Tu y comprends quelque chose toi ? Big Grin


RE: SQL: de l'UPDATE à l'INSERT - Myrina - 12-02-2013

essaie
INSERT INTO t_troupe (FK_joueur, FK_cTroupe, nombre, type)
VALUES (9, 2, 200, '0')
ON DUPLICATE KEY UPDATE
nombre=nombre+values(nombre);
puis

INSERT INTO t_troupe (FK_joueur, FK_cTroupe, nombre, type)
VALUES (9, 2, 300, '0')
ON DUPLICATE KEY UPDATE
nombre=nombre+values(nombre);



RE: SQL: de l'UPDATE à l'INSERT - djidi - 12-02-2013

Dans ton ON DUPLICATE KEY, tu ne mets pas à jour "nombre" mais les valeurs de "FK_joueur" et "FK_cTroupe".

Code :
INSERT INTO t_troupe (FK_joueur, FK_cTroupe, nombre, type)
VALUES (9, 2, 300, '0')
ON DUPLICATE KEY UPDATE nombre = 300;



RE: SQL: de l'UPDATE à l'INSERT - zneman - 13-02-2013

Haaa oui... En effet, c'est bien mieux ! Big Grin (j'ai un peu honte de moi là je dois bien avouer)
Merci à tout le monde pour les aides apportées, ça fait plaisir de reprendre la prog en se cassant bien la tête ! ^^