IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Requête et sous requête [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    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.

  3. #3
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut
    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...

  4. #4
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    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.

  5. #5
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requête et sous requête
    Par 501darts dans le forum Développement
    Réponses: 1
    Dernier message: 21/02/2008, 10h53
  2. intégré une sous requête dans une requête
    Par Smix007 dans le forum SQL
    Réponses: 13
    Dernier message: 25/06/2007, 11h45
  3. inclure une sous requête dans une requête
    Par garsflo dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 08/05/2007, 19h12
  4. Requête et sous requête avec SELECT et UPDATE
    Par Véronique75ca dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 29/06/2006, 21h25
  5. Requêtes et sous requêtes
    Par lau2nyce dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/03/2004, 15h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo