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 :

Conditions dans un WHERE


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 76
    Points : 49
    Points
    49
    Par défaut Conditions dans un WHERE
    [oups je n'avais pas vu qu'une section requête existait, mais je ne pense pas avoir les droits pour déplacer le sujet :p]

    Bien le bonjour!

    Je viens à vous car j'ai un souci de requête!
    Sur mon site j'ai un moteur de recherche qui parse la recherche et qui la compare à différentes tables.

    Imaginons une recherche : "Boulanger paris".
    Je vais vérifier si boulanger existe dans ma table "metier", et si paris existe dans ma table "ville". En fonction je construis ma requête.

    Pour une telle demande voila à quoi ressemble ma requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT 
    a.id_user
    FROM `user` a
    LEFT JOIN `metier` b ON b.id_metier = a.id_metier 
    LEFT JOIN `ville` c ON c.id_ville = a.id_ville
    WHERE 
      MATCH (b.`nom`) AGAINST('boulanger')
    AND
       MATCH (c.`name_geo_ville`) AGAINST('paris');
    Mon souci est quand a.id_ville = 0. Ce champ n'est pas forcement rempli. Mais du coup ma requête n'affiche rien, car il n'y a pas de résultat au niveau du second MATCH AGAINST.
    Comment faire pour ajouter une condition qui dise à ma requête d'appliquer le MATCH AGAINST que si mon champ a._id_ville est différent de 0?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    IF(a.id_ville != 0)
       MATCH (c.`name_geo_ville`) AGAINST('paris');
    Merci à vous!
    Besoin d'un artisan ? Trouvez votre bonheur ici : http://www.touslesartisans.com

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 76
    Points : 49
    Points
    49
    Par défaut
    Je m'apporte un élément de réflexion :p
    Je suis en train de voir CASE en sql, qui est une condition. Je tente donc cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT 
    a.id_user
    FROM `user` a
    LEFT JOIN `metier` b ON b.id_metier = a.id_metier 
    LEFT JOIN `ville` c ON c.id_ville = a.id_ville
    WHERE 
      MATCH (b.`nom`) AGAINST('boulanger')
    AND
      CASE
        WHEN @a.id_ville!= '0' THEN MATCH (c.`name_geo_ville`) AGAINST('paris')
      END
    Mais ça ne fonctionne pas non plus :p
    Besoin d'un artisan ? Trouvez votre bonheur ici : http://www.touslesartisans.com

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Puisque, apparemment, ton moteur de recherche n'est pas basé sur u simple champ de saisie de texte mais sur plusieurs champs de saisie ou des choix dans des listes, construis dynamiquement ta requête en fonction de ce qu'a fait l'utilisateur.
    Un truc de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    $sql = '
    	SELECT a.id_user 
    	FROM `user` a 
    	WHERE 1 
    ';
     
    $join = '';
    $where = '';
     
    if(isset($_POST['choix_metier']))
    {
    	$join .= ' LEFT OUTER JOIN metier m ON m.id_metier = a.id_metier ';
    	$where .= " AND m.nom = '".mysql_real_escape_string($_POST['choix_metier'])."' ";
    }
     
    if(isset($_POST['choix_ville']))
    {
    	$join .= ' LEFT OUTER JOIN ville v ON v.id_ville = a.id_ville ';
    	$where .= " AND v.name_geo_ville = '".mysql_real_escape_string($_POST['choix_ville'])."' ";
    }
     
    $sql .= $join.$where;
    Remarques :
    1) Mauvaise idée d'appeler une table 'user' car c'est un mot réservé du langage SQL !
    2) J'ai supposé que els choix se faisaient dans des listes ; la recherche plain texte devient inutile.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 76
    Points : 49
    Points
    49
    Par défaut
    Bonjour, merci pour cette réponse!

    Et non ma recherche ne se fait qu'à partir d'un champ texte. Là est le souci!
    Sinon je fais une requête par table et en fonction des réponses je construis ma requête, mais ça va être lourd en terme de ressource, surtout si il y a beaucoup de recherches en même temps :s

    Je note pour la base user, je ne savais pas!
    Besoin d'un artisan ? Trouvez votre bonheur ici : http://www.touslesartisans.com

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 032
    Points
    34 032
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par laipreu Voir le message
    Et non ma recherche ne se fait qu'à partir d'un champ texte. Là est le souci!
    Donc tu ne peux pas savoir a priori si ce qui est tapé dans le champ de recherche est une profession, une ville ou autre chose !
    Rien ne te permet de déterminer dans quelle table il faut chercher l'info.

    La seule solution rapide que je vois pour ton cas est de faire une requête qui englobe toutes les jointures externes possibles et un MATCH général sur toutes les colonnes à interroger.
    As-tu essayé, dans ta première requête, de remplacer AND par OR ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

Discussions similaires

  1. Condition dans clause Where
    Par Adweuz dans le forum Langage SQL
    Réponses: 10
    Dernier message: 22/04/2015, 16h53
  2. Inclure une Condition dans un "Where"
    Par the dude dans le forum Langage SQL
    Réponses: 4
    Dernier message: 22/02/2011, 08h42
  3. Une condition dans le where
    Par logiciel_const dans le forum SQL
    Réponses: 2
    Dernier message: 31/01/2011, 18h47
  4. CONDITION dans un WHERE..NOT IN
    Par brasco06 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 08/09/2009, 08h53
  5. Condition dans un where ?
    Par devdev dans le forum Débuter
    Réponses: 7
    Dernier message: 28/08/2008, 12h05

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