Page 1 sur 1

probleme d'update sur multitable

Posté : 12 mai 2006, 09:22
par websylvain
salut,

tout d'abord, je precise que je suis avec MySql 4.qqchose

voilà, j'ai une requête de mise à jour qui me rend 0 rang modifié alors même que je sais qu'il y a des rangs éligibles. j'en veux pour preuve que la même clause where en select me ramène des rangs. je vous montre.

Code : Tout sélectionner

update pari, rencontre set pari.termine = 1 where pari.id_rencontre = rencontre.id_rencontre
cela me dit 0 rang modifié (via code php ou dans phpadmin). si je fais

Code : Tout sélectionner

select * from pari, rencontre where pari.id_rencontre = rencontre.id_rencontre
et bien j'ai quelques rangs. je ne comprend pas. si j'avais des pb de privilège ou autre, je devrais le savoir. et puis si j'ai bien compris, par défaut il s'agit bien d'un inner join. Du reste, dans la doc MySql, il y a un exemple équivalent.

Une idée ? je deviens fou avec ce truc.... :(

Posté : 12 mai 2006, 09:29
par Cyrano
Ta requête UPDATE est curieuse: on ne pointe pas vers plusieurs tables d'abord, ensuite, ta clause WHERE n'est pas bonne : il faudrait pointer vers un identifiant de clé étrangère précis. Un UPDATE, ce n'est pas un SELECT.

Posté : 12 mai 2006, 09:32
par ouckileou
Salut,

ce n'est pas un UPDATE multi-tables que tu fais, puisque tu ne veux modifier qu'une table
For the multiple-table syntax, UPDATE updates rows in each table named in table_references that satisfy the conditions. In this case, ORDER BY and LIMIT cannot be used.
http://dev.mysql.com/doc/refman/4.1/en/update.html

Donc essaye d'enlever la table "rencontre" de la liste

Posté : 12 mai 2006, 09:32
par Invité
salut,

alors pourquoi dans la doc Mysql, il y a
Starting with MySQL 4.0.4, you can also perform UPDATE operations covering multiple tables. However, you cannot use ORDER BY or LIMIT with a multiple-table UPDATE. The table_references clause lists the tables involved in the join. Its syntax is described in Section 13.2.7.1, “JOIN Syntax”. Here is an example:

UPDATE items,month SET items.price=month.price
WHERE items.id=month.id;

http://dev.mysql.com/doc/refman/4.1/en/update.html

Posté : 12 mai 2006, 18:47
par Invité
cela fonctionne tres bien en fait !!!! :roll:

la valeur du nbre de rang qui est rendu est le nbre de rang reellement affectes et non pas le nbre de rang potentiellement modifies.
en fait, les rangs ayant deja la valeur que l'on veut mettre ne sont pas comptabilise. CQFD

les updates multitables marchent donc tres bien, et sont tres pratiques car cela evite de balayer un curseur pour ensuite faire les maj.

a+

Posté : 13 mai 2006, 11:31
par ouckileou
On a pas dit que les updates multitables ne fonctionnaient pas

Mais un update multi tables c'est quand tu modifies plusieurs colonnes dans des tables différentes, hors là ce n'est pas le cas :)

Posté : 17 mai 2006, 13:51
par websylvain
pourquoi pas. mais comment vois tu les choses pour mettre a jour une table en fonction d'une autre quand tu as besoin de croiser l'info et que tu es oblige de passer par une jointure (qui donc t'empeche de faire une maj). tu fais quoi ? tu fais plus complique ?