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

Langage SQL Discussion :

Problème création d'une requete SQL (categorie,sous-cat)


Sujet :

Langage SQL

  1. #1
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 138
    Points : 1 504
    Points
    1 504
    Par défaut Problème création d'une requete SQL (categorie,sous-cat)
    Bonjour,
    J'ai un problème pour concevoir une requete sql qui permet d'effectuer une recherche dans un annuaire sous MYSQL.

    Voici le but de la requete:
    retrouver tous les "sites" qui répondent au moins a l'une de ces regles
    l'url contient "mot clé"
    le nom du site contient "mot clé"
    la rubrique du site contient "mot clé"
    la rubrique pére contient "mot clé".

    Comme vous le devinez, j'ai une table
    site avec comme champ: id,id_rubrique,url,nom
    et une table rubrique : id,id_parent,nom (si id_parent=-1 alors la rubrique n'est pas une sous rubrique).

    Pour le moment, j'ai la requete suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select * 
    from site,rubrique rub1,rubrique rub2 
    where 
    ((url like '%mot_clé%') OR (site.nom like '%mot_clé%') OR (rub1.nom like '%mot_clé%') OR (rub2.nom like '%mot_clé%'))
    and rub1.id=site.id_rub and rub1.id_parent=rub2.id 
    order by site.nom asc
    Cela marche tres bien sauf pour un cas:
    Si le site par exemple appartient a une rubrique qui a un id_parent=-1 (cas ou le site est situé dans une rubrique et non une sous-rubrique), alors il n'est pas retourné. par contre, si le site appartient bien à une sous-rubrique, ca marche.
    Exemple avec des tuples:
    un_site (id=1,id_rubrique='1' url='test',nom='ok')
    une_rubrique (id=1,id_parent=2,nom='enfant_test')
    une_rubrique (id=2,id_parent=-1,nom='parent_test')
    alors ma requete me retourne bien un_site.
    Par contre, si j'ai :
    un_site (id=1,id_rubrique='3' url='test',nom='ok')
    une_rubrique (id=3,id_parent=-1,nom='parent2_test')
    alors un_site n'est pas renvoyé.

    Si vous pouviez m'aider a trouver la syntaxe correcte, je vous en serai gré

    Merci d'avance!

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 48
    Points : 54
    Points
    54
    Par défaut Il faut utiliser une jointure externe.
    Bonjour,

    La syntaxe dépend de la base de données mais une solution possible est en MySQL

    SELECT *
    FROM site
    INNER JOIN rubrique rub1 ON(rub1.id=site.id_rub)
    LEFT JOIN rubrique rub2 ON(rub1.id_parent=rub2.id )
    WHERE
    ((url LIKE '%mot_clé%') OR (site.nom LIKE '%mot_clé%') OR (rub1.nom LIKE '%mot_clé%') OR (rub2.nom LIKE '%mot_clé%'))
    ORDER BY site.nom ASC

    la jointure externe est LEFT JOIN rubrique rub2 ON(rub1.id_parent=rub2.id )

    A+

Discussions similaires

  1. Problème pour créer une requete SQL pour DB2
    Par cnidaire dans le forum DB2
    Réponses: 3
    Dernier message: 29/06/2013, 16h57
  2. Réponses: 6
    Dernier message: 25/10/2010, 14h27
  3. Problème variable dans une requete SQL
    Par SimonAFDT dans le forum PL/SQL
    Réponses: 13
    Dernier message: 30/11/2009, 12h25
  4. Réponses: 2
    Dernier message: 03/09/2006, 11h02
  5. création d'une requete sql
    Par tounsi dans le forum Oracle
    Réponses: 15
    Dernier message: 22/02/2006, 16h12

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