SQL
Résolu
DAG
-
Christounet Messages postés 1264 Date d'inscription Statut Membre Dernière intervention -
Christounet Messages postés 1264 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai un problème en SQL ! Je suis en train de développer une application en PHP avec une base de données.
J'ai une table UTILISATEUR avec plusieurs champs et notamment un champs CODE_POSTAL et un autre DEPARTEMENT.
J'ai une autre table DEPARTEMEMTS qui contiens les NUM et NOM_DEP. Comme on peut s'en douter le champs NUM contient le numéro du département et l'autre NOM_DEP contient le nom du département qui lui est associé.
Je cherche à faire une requête qui sélectionne le code postal de la table UTILISATEUR, récupère les deux premiers caractères puis les compares à ceux du champs NUM de la table DEPARTEMENT. Une fois le numéro de déparement trouvé, la requête récupère le nom du département dans le champs NOM_DEP de la table DEPARTEMEMTS et l'insert dans le champs DEPARTEMENT de la table UTILISTEURS.
J'ai essayé de faire un truc du genre :
Mais forcément ça ne marche pas puisse qu'il prend chaque champs de la table DEPARTEMENT au fur et à mesure.
Quelqu'un aurai-t-il une idée ?
J'ai un problème en SQL ! Je suis en train de développer une application en PHP avec une base de données.
J'ai une table UTILISATEUR avec plusieurs champs et notamment un champs CODE_POSTAL et un autre DEPARTEMENT.
J'ai une autre table DEPARTEMEMTS qui contiens les NUM et NOM_DEP. Comme on peut s'en douter le champs NUM contient le numéro du département et l'autre NOM_DEP contient le nom du département qui lui est associé.
Je cherche à faire une requête qui sélectionne le code postal de la table UTILISATEUR, récupère les deux premiers caractères puis les compares à ceux du champs NUM de la table DEPARTEMENT. Une fois le numéro de déparement trouvé, la requête récupère le nom du département dans le champs NOM_DEP de la table DEPARTEMEMTS et l'insert dans le champs DEPARTEMENT de la table UTILISTEURS.
J'ai essayé de faire un truc du genre :
$statementDepOne = " SELECT departements.ID, departements.num, departements.nom_dep, ouvrant_droit.ID, ouvrant_droit.prenom_OD, ouvrant_droit.nom_OD, ouvrant_droit.date_naissance_OD, ouvrant_droit.departement_OD, ouvrant_droit.code_postal_OD FROM ouvrant_droit INNER JOIN departements ; "; $reqDepOne = mysql_query($statementDepOne) or die('<br>Erreur base de donnée !<br>' . $statementDepOne . '<br>'.mysql_error()); while($data = mysql_fetch_array($reqDepOne)) { $statementDepTwo = "UPDATE ouvrant_droit SET departement_OD = '" . $data[nom_dep] . "' WHERE ('" . substr($data[code_postal_OD], 0, 2) . "='" . $data[num] . "');"; $reqDepTwo = mysql_query($statementDepTwo) or die('<br>Erreur base de donnée !<br>' . $statementDepTwo . '<br>'.mysql_error()); echo $statementDepTwo . "<br>"; }
Mais forcément ça ne marche pas puisse qu'il prend chaque champs de la table DEPARTEMENT au fur et à mesure.
Quelqu'un aurai-t-il une idée ?
A voir également:
- SQL
- Logiciel sql - Télécharger - Bases de données
- Requete sql pix - Forum PHP
- Additions et multiplication dans des requêtes SQL ✓ - Forum MySQL
- Sql query download - Télécharger - Gestion de données
- Ora-00933: la commande sql ne se termine pas correctement ✓ - Forum Oracle
7 réponses
Bonjour,
Le code suivant devrait faire ce que tu veux (je ne l'ai pas testé)
A toi de voir et tiens moi au courant
A plus
Le code suivant devrait faire ce que tu veux (je ne l'ai pas testé)
$statementDepOne = " SELECT Utilisateur.ID , Utilisateur.prenom_OD, Utilisateur.nom_OD, Utilisateur.date_naissance_OD, Utilisateur.departement_OD, Utilisateur.code_postal_OD , (SELECT nom_dep FROM departements WHERE num = LEFT(Utilisateur.code_postal,2)) FROM ouvrant_droit as Utilisateur;";
A toi de voir et tiens moi au courant
A plus
Bonjour,
Ta solution est correcte également, quand à la question de performance, tout dépend si tu as un index sur la colonne NUM de ta table département.
A plus
Ta solution est correcte également, quand à la question de performance, tout dépend si tu as un index sur la colonne NUM de ta table département.
A plus
Bonjour,
Tu peux diminuer le nombre de fois que la table Departement est lue en rajoutant un ORDER BY CODE_POSTAL dans le SELECT sur ta table ouvrant_droit. Il te faut aussi déclarer deux nouvelles variables ANCIEN_CODE et NOUVEAU_CODE initialisés avec des blancs.
Pour chaque record lu dans ta table ouvrant_droit (mysql_fetch_array($reqDepOne)), tu assigne une valeur à la variable NOUVEAU_CODE étant égale au deux premiers caractères du code postal. Tu compares ensuite ANCIEN_CODE avec NOUVEAU_CODE, en cas de différence tu lis ta table département avec le NOUVEAU_CODE, ensuite tu mets la variable ANCIEN_CODE égale à la variable NOUVEAU_CODE.
A plus
Tu peux diminuer le nombre de fois que la table Departement est lue en rajoutant un ORDER BY CODE_POSTAL dans le SELECT sur ta table ouvrant_droit. Il te faut aussi déclarer deux nouvelles variables ANCIEN_CODE et NOUVEAU_CODE initialisés avec des blancs.
Pour chaque record lu dans ta table ouvrant_droit (mysql_fetch_array($reqDepOne)), tu assigne une valeur à la variable NOUVEAU_CODE étant égale au deux premiers caractères du code postal. Tu compares ensuite ANCIEN_CODE avec NOUVEAU_CODE, en cas de différence tu lis ta table département avec le NOUVEAU_CODE, ensuite tu mets la variable ANCIEN_CODE égale à la variable NOUVEAU_CODE.
A plus
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci beaucoup !
En fait j'ai eu le temps de faire autrement. Je le fais en plusieurs requêtes... Je pense que c'est moins performant, mais bon... Je suis un peu sous pression et je n'est pas trop le temps de faire mieux !
En fait j'ai eu le temps de faire autrement. Je le fais en plusieurs requêtes... Je pense que c'est moins performant, mais bon... Je suis un peu sous pression et je n'est pas trop le temps de faire mieux !
function departement() { include '../bdd/connexion_bdd.php'; $statementDepOne = "SELECT nom_OD, prenom_OD, date_naissance_OD, code_postal_OD FROM ouvrant_droit;"; $reqDepOne = mysql_query($statementDepOne) or die('<br>Erreur base de donnée !<br>' . $statementDepOne . '<br>'.mysql_error()); echo $statementDepOne . "<br>"; while($data = mysql_fetch_array($reqDepOne)) { echo $data[nom_OD] . "<br>"; echo $data[prenom_OD] . "<br>"; echo $data[date_naissance_OD] . "<br>"; echo $data[code_postal_OD] . "<br>"; echo substr($data[code_postal_OD], 0, 2) . "<br>"; $statementDepTwo = "SELECT nom_dep FROM departements WHERE num = '" . substr($data[code_postal_OD], 0, 2) ."';"; $reqDepTwo = mysql_query($statementDepTwo) or die('<br>Erreur base de donnée !<br>' . $statementDepTwo . '<br>'.mysql_error()); echo $statementDepTwo . "<br>"; while($dataTwo = mysql_fetch_array($reqDepTwo)) { echo $dataTwo[nom_dep] . "<br>"; $statementDepThree = "UPDATE ouvrant_droit SET departement_OD = '" . str_replace("'","\'",$dataTwo[nom_dep]) . "' WHERE (nom_OD = '" . str_replace("'","\'",$data[nom_OD]) . "' AND prenom_OD = '" . str_replace("'","\'",$data[prenom_OD]) . "' AND date_naissance_OD = '" . $data[date_naissance_OD] . "');"; mysql_query($statementDepThree) or die('<br>Erreur base de donnée !<br>' . $statementDepThree . '<br>'.mysql_error()); echo $statementDepThree . "<br><br>"; } } }