UPDATE problématique [Résolu]

Signaler
Messages postés
73
Date d'inscription
dimanche 28 février 2021
Statut
Membre
Dernière intervention
6 mai 2021
-
Messages postés
73
Date d'inscription
dimanche 28 février 2021
Statut
Membre
Dernière intervention
6 mai 2021
-
Bonjour,

je viens de constater que cette écriture d' update avec jointure ne fonctionne pas correctement....
exemple pour membre 1
$pdostat =  $bdd->prepare("UPDATE map  INNER JOIN  membres ON  membres.pos_x = map.pos_x AND membres.pos_y = map.pos_y SET  map.tile = '/relief/tile_foret.gif', map.ressource = '/objets/arbre.gif', map.qte_ressource = 500  ");

avec un second utilisateur qui utiliserait
exemple pour membre 2
$pdostat =  $bdd->prepare("UPDATE map  INNER JOIN  membres ON  membres.pos_x = map.pos_x AND membres.pos_y = map.pos_y SET  map.tile = '/relief/tile_prairie.gif', map.ressource = '/objets/herbe.gif', map.qte_ressource = 500");

Là, cela modifie AUSSI en table les champs chez le précédent utilisateur. (le membre 1 qui avait des arbres dans une foret se retrouve avec de l'herbe dans une prairie.!) et ainsi de suite.
En fait le dernier update appelé modifie les précédents en table !
J'ai testé sans succès avec
WHERE membres.pos_x = map.pos_x AND membres.pos_y = map.pos_y
WHERE membres.id
WHERE membres.id= id
ce dernier devrait logiquement fonctionner mais j'ai toujours
Integrity constraint violation: 1052 Champ: 'id' dans where clause est ambigu

Quelle serait la méthode correcte pour que cet update fonctionne indépendamment de chaque utilisateur?

3 réponses

Messages postés
32377
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
9 mai 2021
3 468
Bonjour,

Tu veux mettre à jour un utilisateur en particulier ?
Tu connais son ID ?
Ou sinon, comment identifies tu l'utilisateur à mettre à jour ?

Car oui, il faut bien un WHERE .... mais il faut lui donner une valeur ....
là tu indiques juste id ... donc le nom d'une colonne en bdd ... mais il ne va pas deviner tout seul lequel mettre à jour...


Messages postés
15551
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
9 mai 2021
849
bonjour, as-tu essayé
WHERE membres.id= 1
?
Messages postés
73
Date d'inscription
dimanche 28 février 2021
Statut
Membre
Dernière intervention
6 mai 2021

Je ne peux pas mettre WHERE membres.id= 1 car je ne connais pas le numero de l'id.

j'ai tenté WHERE membres.id = $id

$id étant déclaré plus haut dans le script avec
$id = !empty($_SESSION['id']) ? $_SESSION['id'] : NULL;

et là, c'est good. Merci de m'avoir mis sur la bonne piste!