mise a jour via 2 tables [SQL] - SQL/NoSQL - Programmation
Marsh Posté le 19-01-2009 à 13:12:58
Merci Macgawel de ta réponse.
La réponse a ma requête me rend se résultat et je ne vois pas comment mi prendre autrement...
requête SQL: Documentation
UPDATE articles SET prix = '5.95',
prix_editeur = '6.10' WHERE serie IN (
SELECT s.id_serie
FROM articles a, series s
WHERE a.prix = '5.65'
AND s.editeur = 'editeur1'
AND s.id_serie = a.serie
)
MySQL a répondu:Documentation
#1093 - You can't specify target table 'articles' for update in FROM clause
Marsh Posté le 19-01-2009 à 13:48:55
A priori (à prendre avec des pincettes, je ne suis pas un pro de MySQL), je dirais que MySQL râle parce que tu essaye de faire un UPDATE sur une table que tu utilises dans ta requête de sélection. En gros, ça crée une boucle...
Tu devrais déjà tester ta requête juste en SELECT, histoire de voir.
Et, puisqu'on est dans les livres, tu devrais peut-être créer une table avec les gammes de prix.
En fait, tes tables n'ont pas l'air très Relationnelles.
J'aurais tendance à faire (en supposant qu'une série reste chez un unique éditeur...) une table supplémentaire :
TARIFS ( (ID_Editeur, ID_Tarif) PK, Prix, Prix_Editeur)
Au passage, crée des tables pour tes Types et Etats.
Et revoie un peu les tables (une série peut changer d'éditeur en cours de route...)
Marsh Posté le 19-01-2009 à 15:49:31
requête SQL: Documentation
SELECT articles
SET prix = '5.95',
prix_editeur = '6.10' WHERE serie IN (
SELECT s.id_serie
FROM articles a, series s
WHERE a.prix = '5.65'
AND s.editeur = 'editeur1'
AND s.id_serie = a.serie
)
MySQL a répondu:Documentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SET prix = '5.95',
prix_editeur = '6.10' WHERE serie IN (
SELECT s.id_serie
F' at line 1
voila ce que sa donne...
Marsh Posté le 19-01-2009 à 15:58:48
lode a écrit : requête SQL: Documentation |
Pas étonnant que ça plante !
Syntaxe :
Code :
|
Il n'y a JAMAIS de SET dans un SELECT !
Marsh Posté le 19-01-2009 à 17:05:43
Code :
|
merci pour ta correction
Marsh Posté le 19-01-2009 à 17:25:15
En règle générale, pour commencer essaye de faire une requête simple, et après tu rajoutes des clauses. Comme ça, tu verras mieux d'où peut venire l'erreur.
Le problème vient de la ligne 5 :
Déjà, un nombre ne se met pas entre quotes.
Je te dis, fais-toi une table intermédiaire qui contiendra les tarifs. Ca te simplifieras les choses à un point...
Marsh Posté le 19-01-2009 à 18:02:41
je ne peut modifié mes tables pour le moment
j'ai modifié ma requête et j'obtiens ce résultat:
Code :
|
Mais a se niveau je n'ai que les id rien qui me permet de modifié ses même id sans les recherche dans la tables articles
Marsh Posté le 19-01-2009 à 21:36:18
j'ai testé une variante qui me paressé viable...
Code :
|
résultat
Code :
|
Marsh Posté le 20-01-2009 à 11:30:52
Code :
|
Là, ça passe
Et vu que tu ne peux pas modifier la structure, tu aurais peut-être plus vite fait de faire tes update via un script php (ou via le langage de programmation utilisé, s'il y en a un).
Marsh Posté le 20-01-2009 à 22:46:33
Merci macgawel
le résultat
Code :
|
pourquoi 227 puis 242 ????
Marsh Posté le 22-01-2009 à 12:21:49
j'ai compris le 227 puis 242
mais maintenant j'ai un nouveau problème
Code :
|
réponse
Code :
|
je pense que s'est du a la version de phpmyadmin qui se trouve sous 2.6.4-pl4
contrairement a ma base de test qui sous - 2.11.7
Marsh Posté le 18-01-2009 à 18:10:23
Bonjour,
je poste se message pour trouvé une solution a mon problème
je doit modifié la valeur de plusieurs articles d'une de mes tables sous PhpMyAdmin en me servant d'une colonne d'une autre table comme critère de modification
mes tables
Mon problème:
Remplacer le contenu du champ "prix" par "le nouveau_prix" ET le contenu du champ "prix_editeur" par "le nouveau_prix_editeur" pour tous les enregistrements dont le champ "prix" est égal à "telle_valeur" ET le champ "editeur" est égal à "tel_editeur".
R:
Problème:
Remplacer le contenu du champ "5.65" par "5.95" ET le contenu du champ "5.75" par "6.10" pour tous les enregistrements dont le champ "prix" est égal à "5.65" ET le champ "editeur" est égal à "editeur1".
Je doit modifié les prix "prix_editeur" "prix" par de nouvelles valeur et se pour différente valeur.
En gros je devrai le faire pour plusieurs éditeurs qui change leurs gammes prix par tranche [ex: les 5.65 par 5.95; 5.50 par 5.75; 6.92 par 7.25 (sans prendre en conte la modification des "prix_editeur" )] pour faire le lien entre les 2 tables j'ai "serie" et "id_serie"
Merci pour toute les réponse éventuelle, j'espère que je suis suffisamment claire si un doute subsiste n'hésitez pas me le dire.