Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/09/2011, 22h53   #1
Membre régulier
 
Inscription : août 2008
Messages : 402
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 402
Points : 78
Points : 78
Par défaut la requête peut-elle être améliorée ? Update de 3 tables ?

Bonsoir voici un update de 3 tables
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
UPDATE civilites,personnes,adresses
SET 
civilites.civilite='MR',
personnes.nom_fam='duchmol',
personnes.prenom='paul',
adresses.numero_rue='1000b',
adresses.nom_rue='labas'
WHERE 
id_civilite=1 AND 
personnes.id_personne=2 AND
adresses.id_personne=2
peut-on faire autrement car ici il faut que je récupère tous les ID correspondants ?
ici je pense que je n'utilise pas les relations entre les tables
merci d'avance pour la réponse
keokaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2011, 08h37   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
Normalement, quand on veut mettre à jour 3 tables, on fait trois requêtes.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2011, 08h41   #3
Membre régulier
 
Inscription : août 2008
Messages : 402
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 402
Points : 78
Points : 78
merci de ta réponse cinephile
Donc, c'est plus optimisé de faire 3 requêtes pour 3 tables ?
Il n'est pas nécessaire d'établir des relations entres les tables (c'est plus simple, d'ailleurs j'avais pensé faire 3 requêtes, mais je pensais que ce n'était pas la bonne façon de le faire).
Ce n'est pas pareil que de faire un SELECT où là il faut faire une jointure et pas 3 selects dans 3 tables.
keokaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2011, 08h50   #4
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
Ta manière de faire est à mon avis dangereuse car tu risque de mettre à jour plus de lignes que tu le souhaiterais.
Je crois qu'avec plusieurs tables dans l'UPDATE, le SGBD va faire un produit cartésien s'il n'y a pas de condition de jointure. En tout cas, je ne fais jamais comme ça. Tout au plus, je fais une ou des jointures pour déterminer quelles lignes de la table doivent être mises à jour, avec la syntaxe normalisée des jointures par exemple :
Code :
1
2
3
4
UPDATE A
INNER JOIN B ON B.id = A.id_B
SET A.colonne_a_modifier = 'nouvelle_valeur'
WHERE B.une_colonne = 'une_valeur'
Citation:
il faut que je récupère tous les ID correspondant?
Que veux tu dire par là ?
Tu veux mettre à jour ou sélectionner ?
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2011, 09h37   #5
Membre régulier
 
Inscription : août 2008
Messages : 402
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 402
Points : 78
Points : 78
je souhaite juste faire un update
j'ai testé ce que tu m'a mis
Code :
1
2
3
4
5
6
 
UPDATE personnes
INNER JOIN adresses 
ON adresses.id_personne = personnes.id_personne
SET personnes.nom_fam='duchmol',adresses.numero_rue='9'
WHERE personnes.id_personne=2
ici ça fonctionne

ici j'ai fait un test avec une table en plus
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
UPDATE personnes
 
INNER JOIN adresses,civilites
 
ON 
adresses.id_personne = personnes.id_personne,
civilites.id_civilite = personnes.civilite
 
SET 
personnes.nom_fam='duchmol',
adresses.numero_rue='9',
civilites.civilite='3'
 
WHERE 
personnes.id_personne=2
Code :
1
2
 
#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 'ON adresses.id_personne = personnes.id_personne, civilites.id_civilite = pers' at line 5
ici il faut que je fasse 2 requêtes ?
keokaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2011, 11h15   #6
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
Les jointures ne s'écrivent pas comme ça !
Code :
1
2
3
4
5
6
7
8
9
10
FROM t1
INNER JOIN t2 ON condition_de_jointure
  INNER JOIN t3 ON condition_de_jointure
 
-- ou pour UPDATE
UPDATE t1
INNER JOIN t2 ON condition_de_jointure
  INNER JOIN t3 ON condition_de_jointure
SET -- la modif à faire
WHERE -- condition de restriction sur les lignes à modifier
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2011, 11h29   #7
Membre régulier
 
Inscription : août 2008
Messages : 402
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 402
Points : 78
Points : 78
merci de m'avoir donné la bonne syntaxe
cela fonctionne
keokaz est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h31.


 
 
 
 
Partenaires

Hébergement Web