Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum 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 24/10/2011, 19h54   #1
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Par défaut Requête et sous requête

Bonjour à tous,

Je fais une requête de recherche dans une table de users, après un formulaire avec divers champs de critères, dont mots-clés.

voici la dernière partie de la requête concernant le mot-clé, justement :

Code :
1
2
3
4
5
6
7
8
9
 
if($f['mc'] != ""){
$sql .= " AND (pseudo LIKE '%".$f['mc']."%' 
|| adresse LIKE '%".$f['mc']."%' 
|| adresse2 LIKE '%".$f['mc']."%' 
|| ville LIKE '%".$f['mc']."%' 
|| code_postal LIKE '%".$f['mc']."%' 
|| pays LIKE '%".$f['mc']."%') ";
}
Le problème est que les champs "ville" et pays" de la table "users" sont des champs numériques faisant référence (clé) à une table "ville" (id, nom) et "pays" (id, nom).

Exemple :
Table users : champ ville = 4582
Table villes : id | 4582 - Nom | Paris

Évidemment, un internaute ne va pas saisir 4582 dans le form de recherche, mais Paris. Dans ces conditions, comment articuler la sous-requête pour aller chercher l'ID de Paris dans la table "villes" et récupérer les users correspondant dans la table des users ?

Merci de vos conseils.
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2011, 23h17   #2
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
Bonjour,

Dans ton cas, c'est simple :
- soit l'utilisateur sélectionne la ville ou le pays dans une liste et là tu récupères les ids => tu remplaces LIKE par = dans ton code pour les critères ville et pays.

- soit l'utilisateur tape un morceau de texte pour chaque champ et là tu récupères les bouts de textes et tu conserves les LIKE dans tes critères.
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 06h31   #3
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Bonjour et merci de m'avoir répondu.

Ben non, ce n'est pas si simple dans mon cas. Parce que si j'ai justement mis la partie mot-clé de la recherche, c'est parce que j'ai déjà un select "ville", "département", "pays"... et avec eux, pas de souci.

Là, le mot-clé, c'est un "passe-partout". Et ça m'embête de joindre les tables "villes" et "pays" à la table "users" alors je cherche à faire un genre de "SOUS-LIKE MOT-CLE" sur ces tables pour récupérer les ids.
Ou un WHERE SELECT...
renaud26 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 10h22   #4
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 462
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 462
Points : 2 552
Points : 2 552
Envoyer un message via Skype™ à rawsrc
Citation:
Envoyé par renaud26 Voir le message
Et ça m'embête de joindre les tables "villes" et "pays" à la table "users"
Bon là, je dois avouer que l'argument est en bois. L'important c'est pas de savoir si ça t'embête ou pas mais d'avoir un système fonctionnel. Donc si dans ton design tu dois lier les tables Villes et Pays à la table Utilisateur pour ramener un résultat de recherche valable à défaut d'être exhaustif, tu le fais et pis c'est tout.

Soit, tu fais une jointure (JOIN, LEFT JOIN, RIGHT JOIN) soit tu fais une sous-requête. Ma préférence va largement vers la jointure.
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2011, 11h21   #5
Membre confirmé
 
Avatar de renaud26
 
Inscription : mars 2003
Messages : 1 043
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Puy de Dôme (Auvergne)

Informations forums :
Inscription : mars 2003
Messages : 1 043
Points : 285
Points : 285
Oui, effectivement pas le choix...
J'ai donc joint les 2 tables à users et c'est impec.
Merci de ton aide et bonne journée.
renaud26 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 12h05.


 
 
 
 
Partenaires

Hébergement Web