[RESOLU] updtate avec jointure modifie d'autres champs?

Eléphant du PHP | 345 Messages

26 avr. 2021, 21:11

Bonjour, je viens de constater que cette écriture d' update avec jointure ne fonctionne pas correctement....
exemple pour le 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  ");
En fait, avec un second utilisateur qui utiliserait
exemple pour le 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 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.

J'ai testé avec
WHERE membres.pos_x = map.pos_x AND membres.pos_y = map.pos_y
WHERE membres.id
sans succès. Quelle serait la méthode correcte pour que cet update fonctionne indépendamment de chaque utilisateur?

Eléphant du PHP | 345 Messages

27 avr. 2021, 11:17

En fait le dernier update modifie les précédents en table !
j'ai changé la clause WHERE en indiquant le bon id mais cela me renvoie
Integrity constraint violation: 1052 Champ: 'id' dans where clause est ambigu
$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_desert.gif',
map.ressource = '/objets/sable.gif', map.qte_ressource = 500 WHERE membres.id= id");

Mammouth du PHP | 2703 Messages

27 avr. 2021, 14:25

WHERE membres.id= id
ce n'est pas id qu'il faut mettre mais l'id du 1er membre, puis l'id du second ...
WHERE membres.id= 1
WHERE membres.id= 126

Eléphant du PHP | 345 Messages

27 avr. 2021, 16:24

J'ai mis WHERE id = $id' car je ne peux pas savoir le numéro de l'id mais ça ne va pas non plus.
idem pour
WHERE id = $_SESSION['id']

Eléphant du PHP | 345 Messages

27 avr. 2021, 16:33

Trouvé ! :idea:

WHERE membres.id = $id