Requete SQL
DAG
-
DAG -
DAG -
Bonjour,
J'ai un problème avec une requête SQL. Je m'explique :
J'ai une table avec des infos sur des utilisateurs comme leurs noms prénom date de naissance ... Il y a un champs particulier : adresses_users. Ce champs est un champs de type text et on y retrouve l'adresse complete, c'est à dire la rue le code postal et la vile d'un coup.
J'ai aussi une colonne secteurs_users qui est pour l'instant vide.
J'ai une autre table avec les mêmes informations concernant l'adresse mais séparées en différentes colonnes. La colonne rue contient les adresses, la colonne CP contient les codes postaux et la colonne ville contient contient le nom des villes.
Dans cette table j'ai une autre colonne : secteur. Cette colonne permet de faire correspondre une adresse à un secteur.
Je souhaiterais remplir la colonne secteurs_users de la table1 avec les données de la colonne secteur de la table2.
Le problème est que les champs adresses ne sont les mêmes... J'ai essayé avec un like mais je n'y arrive pas !!
Est-ce que que quelqu'un aurai une idée pour me débloquer ?
Si des choses ne sont pas claires, n'hésitez pas à me faire reformuler mon histoire !
Merci d'avance.
J'ai un problème avec une requête SQL. Je m'explique :
J'ai une table avec des infos sur des utilisateurs comme leurs noms prénom date de naissance ... Il y a un champs particulier : adresses_users. Ce champs est un champs de type text et on y retrouve l'adresse complete, c'est à dire la rue le code postal et la vile d'un coup.
J'ai aussi une colonne secteurs_users qui est pour l'instant vide.
J'ai une autre table avec les mêmes informations concernant l'adresse mais séparées en différentes colonnes. La colonne rue contient les adresses, la colonne CP contient les codes postaux et la colonne ville contient contient le nom des villes.
Dans cette table j'ai une autre colonne : secteur. Cette colonne permet de faire correspondre une adresse à un secteur.
Je souhaiterais remplir la colonne secteurs_users de la table1 avec les données de la colonne secteur de la table2.
Le problème est que les champs adresses ne sont les mêmes... J'ai essayé avec un like mais je n'y arrive pas !!
Est-ce que que quelqu'un aurai une idée pour me débloquer ?
Si des choses ne sont pas claires, n'hésitez pas à me faire reformuler mon histoire !
Merci d'avance.
A voir également:
- Requete SQL
- Logiciel sql - Télécharger - Bases de données
- Requête sql pour afficher uniquement les fleurs dont le prix est strictement inférieur à 10 euros - Forum calculatrices
- Sql (+) - Forum Programmation
- Cherche des haricot vendez les moi ✓ - Forum DS
- Sql lister les tables ✓ - Forum Programmation
5 réponses
Slt. Je n'ai pas très bien compris. Peux-tu utiliser les expressions régulières ? Je ne sais pas, tu utilises quel SGBD déjà ?
adaro2000, oui je peux utiliser des expression régulieres. Je travail en PHP et le systeme de gestion de base de données est MySQL. Je ne connais pas tres bien les expressions régulieres, je débute en PHP.
chmanu, oui j'ai des ID dans les deux tables. Mais il me semble que les requêtes que tu me propose ne soit pas bonne.
En fait pour entrer plus dans le détail, j'ai plusieurs fichiers Excel qui comportes tous des informations sur les utilisateurs. Par exemple dans le premier j'ai les champs : Nom, Prénom, Date de naissance, adresse perso, pro... Dans le deuxième, j'ai des info communes comme le nom le prénom et la date de naissance, et d'autres comme le statut, l'unité d'affaire...
Le but de l'application est de pouvoir entrer ces différents fichiers Excel dans l'application afin de pouvoir créer une base commune. Je rentre donc chaque fichier Excel dans une table, je créé une table de référence et je la compare aux table correspondant aux données des fichiers en la mettant a jour si besoin est.
Le problème c'est que le champs "adresse pro" contient l'adresse complète (numéro de rue, rue, code postal et ville). A partir de cette donnée, je peux en déduire le secteur de l'utilisateur. J'ai donc créé une table "d'équivalence" (ma table2) avec les champs ID, rue, code postal, ville, et secteur. Comme ça, je peux savoir en fonction de l'adresse pro le secteur.
J'ai donc créé une colonne "secteur" dans ma base de référence (la table1 dans l'exemple de mon premier message). Une fois la moulinette de comparaison des table des fichier à la table de référence, je voudrais compléter le champs secteur en fonction des données que j'ai peu rentrer dans ma table d'équivalence".
Et donc le problème c'est que je n'arrive pas à récupéré seulement la rue dans le champs "adresse pro" de la table des utilisateurs pour pouvoir le comparer au champs "rue" de ma table des équivalence et ainsi en déduire le secteur de l'utilisateur.
Je ne sais pas si je suis très claire dans mes explications ...
N'hésitez pas a me redemander des explication.
Pour info j'avais commencer à faire un truc du genre :
Et c'est au ???? que je suis bloquer. Je pensais mettre :
Mais le problème c'est que "adresse_pro" est formé de la façon suivante : numéro, rue, code postal, ville ; et que "rue" est formé de la façon suivante : numero + rue.
Donc du coup je n'arrive pas à retrouver la rue dans le champs adresse_pro de la table des users...
Voila ! En espérant avoir été plis claire !
chmanu, oui j'ai des ID dans les deux tables. Mais il me semble que les requêtes que tu me propose ne soit pas bonne.
En fait pour entrer plus dans le détail, j'ai plusieurs fichiers Excel qui comportes tous des informations sur les utilisateurs. Par exemple dans le premier j'ai les champs : Nom, Prénom, Date de naissance, adresse perso, pro... Dans le deuxième, j'ai des info communes comme le nom le prénom et la date de naissance, et d'autres comme le statut, l'unité d'affaire...
Le but de l'application est de pouvoir entrer ces différents fichiers Excel dans l'application afin de pouvoir créer une base commune. Je rentre donc chaque fichier Excel dans une table, je créé une table de référence et je la compare aux table correspondant aux données des fichiers en la mettant a jour si besoin est.
Le problème c'est que le champs "adresse pro" contient l'adresse complète (numéro de rue, rue, code postal et ville). A partir de cette donnée, je peux en déduire le secteur de l'utilisateur. J'ai donc créé une table "d'équivalence" (ma table2) avec les champs ID, rue, code postal, ville, et secteur. Comme ça, je peux savoir en fonction de l'adresse pro le secteur.
J'ai donc créé une colonne "secteur" dans ma base de référence (la table1 dans l'exemple de mon premier message). Une fois la moulinette de comparaison des table des fichier à la table de référence, je voudrais compléter le champs secteur en fonction des données que j'ai peu rentrer dans ma table d'équivalence".
Et donc le problème c'est que je n'arrive pas à récupéré seulement la rue dans le champs "adresse pro" de la table des utilisateurs pour pouvoir le comparer au champs "rue" de ma table des équivalence et ainsi en déduire le secteur de l'utilisateur.
Je ne sais pas si je suis très claire dans mes explications ...
N'hésitez pas a me redemander des explication.
Pour info j'avais commencer à faire un truc du genre :
SELECT nom, prenom, date de naissance, adresse_pro FROM ma_table_user
//j'exécute ma requete dans un while {
SELECT rue, secteur FROM ma_table_d'équivalence
//j'exécute ma requête dans un while {
UPDATE ma_table_user SET secteur = le_secteur_de_la_table_d'équivalence WHERE ????
//exécution de la requête
}
}
Et c'est au ???? que je suis bloquer. Je pensais mettre :
adresse_pro LIKE %rue%
Mais le problème c'est que "adresse_pro" est formé de la façon suivante : numéro, rue, code postal, ville ; et que "rue" est formé de la façon suivante : numero + rue.
Donc du coup je n'arrive pas à retrouver la rue dans le champs adresse_pro de la table des users...
Voila ! En espérant avoir été plis claire !
C'est pas du code très propre...
ça c'est la requete mais bien évidement elle ne marche pas puisque c'est l'exemple que j'essayais de vous expliquer.
Je vous joins aussi la table comme ça...
Le nom des champs est sur la gauche, et en face c'est un exemple de ce qui pourrai se trouver dans la base :
Voila, bon j'ai mis des exemple un peu bidon, car ce sont des données sensibles, j'espère que ça ne compromettra pas la compréhension...
Et donc moi, j'aimerais retrouver le champs "CLASC" de la table de comparaison en fonction du champs "adresse_pro_OD" de la table des users, et une fois la CLASC trouver, j'aimerais la mettre dans le champs "CLASC_OD" de la table des users.
Mais comme le champs "adresse_pro_OD" de la table des users n'est pas formé pareil que le champs "rue" de la table de comparaison, mais qu'il ont qund même des infos communes, je ne sais pas trop comment faire !
J'ai bien essayé avec un LIKE (comme plus haut) mais ça ne peut pas marcher...
Je pense qu'il y aurai moyen en utilisant une expression régulière, mais je ne sais pas trop les utiliser....
Merci pour vos réponses, et merci d'avance pour vous prochaines réponses !
function clasc()
{
include '../bdd/connexion_bdd.php';
$statementCLASCOne = "SELECT nom_OD, prenom_OD, date_naissance_OD, CLASC_OD FROM ouvrant_droit;";
$reqCLASCOne = mysql_query($statementCLASCOne) or die('<br>Erreur base de donnée !<br>' . $statementCLASCOne . '<br>'.mysql_error());
echo $statementCLASCOne . "<br>";
while($data = mysql_fetch_array($reqCLASCOne))
{
echo $data[nom_OD] . "<br>";
echo $data[prenom_OD] . "<br>";
echo $data[date_naissance_OD] . "<br>";
echo $data[CLASC_OD] . "<br>";
$statementCLASCTwo = "SELECT CP, CLASC FROM CLASC WHERE rue LIKE '%" . $data[CLASC_OD] ."%';";
$reqCLASCTwo = mysql_query($statementCLASCTwo) or die('<br>Erreur base de donnée !<br>' . $statementCLASCTwo . '<br>'.mysql_error());
echo $statementCLASCTwo . "<br>";
while($dataTwo = mysql_fetch_array($reqCLASCTwo))
{
echo $dataTwo[CP] . "<br>";
$statementCLASCThree = "UPDATE ouvrant_droit SET code_postal_prof_OD = '" . $dataTwo[CP] ."';";
mysql_query($statementCLASCThree) or die('<br>Erreur base de donnée !<br>' . $statementCLASCThree . '<br>'.mysql_error());
echo $statementCLASCThree . "<br>";
echo $dataTwo[CLASC] . "<br>";
$statementCLASCFour = "UPDATE ouvrant_droit SET CLASC_OD = '" . $dataTwo[CLASC] ."';";
mysql_query($statementCLASCFour) or die('<br>Erreur base de donnée !<br>' . $statementCLASCFour . '<br>'.mysql_error());
echo $statementCLASCFour . "<br>";
}
}
}
ça c'est la requete mais bien évidement elle ne marche pas puisque c'est l'exemple que j'essayais de vous expliquer.
Je vous joins aussi la table comme ça...
Le nom des champs est sur la gauche, et en face c'est un exemple de ce qui pourrai se trouver dans la base :
Voila, bon j'ai mis des exemple un peu bidon, car ce sont des données sensibles, j'espère que ça ne compromettra pas la compréhension...
Et donc moi, j'aimerais retrouver le champs "CLASC" de la table de comparaison en fonction du champs "adresse_pro_OD" de la table des users, et une fois la CLASC trouver, j'aimerais la mettre dans le champs "CLASC_OD" de la table des users.
Mais comme le champs "adresse_pro_OD" de la table des users n'est pas formé pareil que le champs "rue" de la table de comparaison, mais qu'il ont qund même des infos communes, je ne sais pas trop comment faire !
J'ai bien essayé avec un LIKE (comme plus haut) mais ça ne peut pas marcher...
Je pense qu'il y aurai moyen en utilisant une expression régulière, mais je ne sais pas trop les utiliser....
Merci pour vos réponses, et merci d'avance pour vous prochaines réponses !
Bonjour,
J'ai essayé de comprendre ton pb.
As tu un id afin de faire une jointure sur tes deux tables (id_user) ?
Dans ce cas, tu peux essayer un
update table1 set secteurs_users = table2.rue || table2.CP || table2.ville where table1.id_user = table2.id_user
sinon, il faudra passer par un truc du genre :
update table1 set secteurs_user = table2.secteur where table1.adresse_user = table2.rue || table2.CP || table2.ville
Sinon, as quoi te sers cette manip ? Dans une base de données, il faut éviter la redondance d'informations.
Car si ce que je te propose est valable, pourquoi le stocker au lieu de faire une jointure sur ta table table2 à chaque fois que tu veux récupérer ton nouveau champ ?
Cordialement,
Chmanu
J'ai essayé de comprendre ton pb.
As tu un id afin de faire une jointure sur tes deux tables (id_user) ?
Dans ce cas, tu peux essayer un
update table1 set secteurs_users = table2.rue || table2.CP || table2.ville where table1.id_user = table2.id_user
sinon, il faudra passer par un truc du genre :
update table1 set secteurs_user = table2.secteur where table1.adresse_user = table2.rue || table2.CP || table2.ville
Sinon, as quoi te sers cette manip ? Dans une base de données, il faut éviter la redondance d'informations.
Car si ce que je te propose est valable, pourquoi le stocker au lieu de faire une jointure sur ta table table2 à chaque fois que tu veux récupérer ton nouveau champ ?
Cordialement,
Chmanu
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question