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

Requêtes MySQL Discussion :

Probleme de SELECT


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 41
    Par défaut Probleme de SELECT
    Bonjour et meilleurs voeux,

    Je vais vous poser une question certainement stupide mais qui pose un soucis.

    J'ai 3 tables décrites ci dessous

    OBJ_OI
    --------
    ID
    .....

    OBJ_MOT_INDEXE
    -----------------
    ID
    libelle

    et une table de relation

    REL_OI_MOT_INDEXE
    --------------------
    ID_OI
    ID_MOT
    emplacement (titre, motsclefs ou description)

    Je veux récupérer les OI (obj_OI) qui ont par exemple les mots "HOTELS" et "ALBI" dans le titre.

    VOila ma requete qui ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT obj_OI.* 
    FROM obj_OI, rel_OI_mot_indexe, obj_mot_indexe
    WHERE obj_OI.ID = rel_OI_mot_indexe.ID_OI 
    AND obj_mot_indexe.ID = rel_OI_mot_indexe.ID_mot_indexe 
    AND obj_OI.ID = rel_OI_mot_indexe.ID_OI 
    AND (
    (obj_mot_indexe.libelle LIKE ("%HOTEL%") AND rel_OI_mot_indexe.emplacement="titre")
     AND 
    (obj_mot_indexe.libelle LIKE ("%ALBI%") AND rel_OI_mot_indexe.emplacement="titre")
    ) 
    GROUP BY obj_OI.ID
    Une clause "IN" serait peut etre plus judicieuse mais j'ai testé et ca ne me renvoie toujours pas de résultats.

    Merci de votre éclairage

  2. #2
    Membre éclairé
    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2004
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : développeur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2004
    Messages : 481
    Par défaut
    Pourquoi 2 fois

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    obj_OI.ID = rel_OI_mot_indexe.ID_OI
    Pourquoi

    Alors que dans la table il y a ID_mot ?

    Pourquoi pas quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AND ((obj_mot_indexe.libelle LIKE ("%HOTEL%ALBI%") OR obj_mot_indexe.libelle LIKE ("%ALBI%HOTEL%")) AND rel_OI_mot_indexe.emplacement="titre")

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 41
    Par défaut
    Citation Envoyé par senacle
    Pourquoi 2 fois

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    obj_OI.ID = rel_OI_mot_indexe.ID_OI
    Pourquoi

    C'est sur que cette liaison est redondante, je n'en ai pas besoin

    Alors que dans la table il y a ID_mot ?

    C'est un erreur de ma part, mon champ s'appelle bien ID_mot_indexe

    Pourquoi pas quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    AND ((obj_mot_indexe.libelle LIKE ("%HOTEL%ALBI%") OR obj_mot_indexe.libelle LIKE ("%ALBI%HOTEL%")) AND rel_OI_mot_indexe.emplacement="titre")
    Imaginons que j'ai 4 mots de saisis dans mon moteur de recherche, il me sera difficile de créer toutes les combinaisons possibles genre mot1%mot2%mot3%mot4, mot1%mot3%mot2%mot4%, etc... c'est pourquoi j'ai créé une table de relation

    Merci quand meme

  4. #4
    Membre éclairé
    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2004
    Messages
    481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : développeur
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Octobre 2004
    Messages : 481
    Par défaut
    Dans ce cas, un OR me semble peut être plus approprié :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    AND (
    (obj_mot_indexe.libelle LIKE ("%HOTEL%") AND rel_OI_mot_indexe.emplacement="titre")
     OR
    (obj_mot_indexe.libelle LIKE ("%ALBI%") AND rel_OI_mot_indexe.emplacement="titre")
    )
    Ou alors tu peux faire une première requête qui récupère tous les HOTEL.
    Tu fais une autre requête sur les résultats de la première qui contient tous les ALBI :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    SELECT * FROM
    (SELECT *
    FROM ...
    WHERE ...HOTEL...)
    WHERE ...ALBI...)
    Mais si la base est de grande taille ou s'il y a plusieurs mots clés, le résultat risque de se faire attendre longtemps...

    La première question à se poser est :

    mot1 ET mot2 ...
    ou
    mot1 OU mot2...

    Selon la combinaison, la requête sera différente, bien sûr.

  5. #5
    Membre Expert
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Par défaut
    La requête d'origine peut se simplifier en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT obj_OI.* 
    FROM obj_OI, rel_OI_mot_indexe, obj_mot_indexe
    WHERE obj_OI.ID = rel_OI_mot_indexe.ID_OI 
      AND obj_mot_indexe.ID = rel_OI_mot_indexe.ID_mot_indexe
      AND rel_OI_mot_indexe.emplacement="titre"
      AND obj_mot_indexe.libelle LIKE "%HOTEL%"
      AND obj_mot_indexe.libelle LIKE "%ALBI%"
    et même de préférence
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT obj_OI.* 
    FROM obj_OI
         JOIN rel_OI_mot_indexe ON obj_OI.ID = rel_OI_mot_indexe.ID_OI
         JOIN obj_mot_indexe ON obj_mot_indexe.ID = rel_OI_mot_indexe.ID_mot_indexe AND rel_OI_mot_indexe.emplacement="titre"
    WHERE obj_mot_indexe.libelle LIKE "%HOTEL%"
      AND obj_mot_indexe.libelle LIKE "%ALBI%"
    et ce serait mieux avec un "titre" unique (ce qui je suppose est le cas)... mais elle devrait marcher. Il y a vraiment des données qui devraient être retournées en base ?

    Le 'IN', je ne le sens pas Pas vraiment plus beau, probablement pas plus rapide.

  6. #6
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 29
    Par défaut
    Tu ne peux pas mettre
    (obj_mot_indexe.libelle LIKE ("%HOTEL%") AND rel_OI_mot_indexe.emplacement="titre")
    AND
    (obj_mot_indexe.libelle LIKE ("%ALBI%") AND rel_OI_mot_indexe.emplacement="titre")
    )
    Sinon ça veut dire que ton libellé doit etre egale à hotel et à albi, mais c'est impossible, il peut etre egale soit à l'un soit à l'autre...

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

Discussions similaires

  1. probleme de selection aleatoire sur excel avec macro vba
    Par guillaume sors dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/10/2005, 10h51
  2. [ASE]probleme memoire: select dans une insert
    Par SegmentationFault dans le forum Sybase
    Réponses: 2
    Dernier message: 16/08/2005, 12h20
  3. [XSLT] Probleme de selection avec namespaces
    Par Ludo_xml dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 01/06/2005, 14h32
  4. probleme requete select avec 2 colonnes
    Par cricri45000 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 21/04/2005, 10h39
  5. Probleme avec Select Case
    Par GeffD dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 07/03/2005, 15h28

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