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 :

Select sur deux champ avec prèsence d'au moins 1


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Novembre 2008
    Messages : 25
    Points : 28
    Points
    28
    Par défaut Select sur deux champ avec prèsence d'au moins 1
    Bonjour tout le monde.

    Donc voilà j'ai une base composé ainsi:

    Table cause:
    ID_cause
    Description

    Table effet:
    ID_effet
    Description

    table categorie:
    ID_categorie
    categorie

    table solution:
    ID_cause (ref cause.ID_cause)
    ID_effet (ref effet.ID_effet)
    ID_categorie (ref categorie.ID_categorie)
    SOLUTION
    DESCRITPION
    TEMPS
    DATE

    Donc voilà ce que je désire faire c'est que lorsque je fait une recherche par exemple du mot clé NTLDR dans la catégorie Win XP et bien il cherche la solution qui est lié à la cause ou l'effet qui contient NTLDR dans sa description.
    J'ai commencé avec cette requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select s.ID_CAUSE,s.ID_EFFET,s.ID_CATEGORIE,SOLUTION,DESCRITPION,TEMPS,DATE 
    from solution S,categorie cat,cause c,effet e 
    where 
    cat.id_categorie=s.id_categorie and c.id_cause=s.id_cause and e.id_effet=s.id_effet and 
    cat.description="Win XP" or c.description like "%NTLDR%" or e.description like "%test%"  
    group by s.solution
    La il m'affiche bien ce que je veux mais si je met n'importe quoi dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c.description like "%NTLDR%" or e.description like "%test%"
    Cela marche aussi car il à remplie la clause
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat.description="Win XP"
    Donc ce je voudrais c'est que il cherche uniquement dans cat.description="Win XP" plus le keyword présent dans un des deux champ (au moins 1) c.description et e.description

    Si c'est pas claire dîtes le moi merci.

  2. #2
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    Deux choses, avec des jointures, la requête est plus facile à lire, écrire, comprendre et donc maintenir.
    Pas de clause GROUP BY sans fonction d'agrégation ou de stat dans la clause SELECT.
    Ce qui nous donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT s.ID_CAUSE,s.ID_EFFET,s.ID_CATEGORIE,SOLUTION,DESCRITPION,TEMPS,DATE 
    FROM solution s
    INNER JOIN categorie cat ON cat.id_categorie=s.id_categorie
    INNER JOIN cause c ON c.id_cause=s.id_cause
    INNER JOIN effet e ON e.id_effet=s.id_effet
    WHERE cat.description="Win XP" AND
       (c.description LIKE "%NTLDR%" 
       OR e.description LIKE "%test%")
    A partir de là on va pouvoir commencer à mieux cerner le problème.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Novembre 2008
    Messages : 25
    Points : 28
    Points
    28
    Par défaut
    Alors merci beaucoup je viens d'apprendre deux truc là

    INNER JOIN categorie cat
    je connaissais pas, je vais me renseignement pour vois un plus en profondeur ceci.

    AND
    (c.description LIKE "%NTLDR%"
    OR e.description LIKE "%test%")
    Je n'avais as du tout penser aux () c'est vraiment tout simple.

    Pas de clause GROUP BY sans fonction d'agrégation ou de stat dans la clause SELECT
    Par contre je ne suis pas d'accord avec toit pour ceci car avec la clause having tu es obligé d'utiliser le group by et pourtant pas besoin de fonction d'agrégation.

  4. #4
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 011
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 011
    Points : 23 692
    Points
    23 692
    Par défaut
    Citation Envoyé par 000Alucard000 Voir le message
    Par contre je ne suis pas d'accord avec toit pour ceci car avec la clause having tu es obligé d'utiliser le group by et pourtant pas besoin de fonction d'agrégation.
    On peut utiliser le GROUP BY sans forcément avoir de fonction d'agrégation dans la requête. Ca revient alors au même que faire un DISTINCT.

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  5. #5
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Citation Envoyé par ced Voir le message
    On peut utiliser le GROUP BY sans forcément avoir de fonction d'agrégation dans la requête. Ca revient alors au même que faire un DISTINCT.
    Alors autant utiliser DISTINCT qui est justement fait pour ça.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

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

Discussions similaires

  1. [Toutes versions] Requête sur deux champs avec doublons.
    Par RKU01 dans le forum Access
    Réponses: 2
    Dernier message: 22/07/2009, 12h19
  2. select sur un champs texte avec traitement du texte
    Par nicerico dans le forum Requêtes
    Réponses: 2
    Dernier message: 25/04/2009, 07h57
  3. [Oracle] jointures avec une somme sur deux champs
    Par guggus dans le forum Langage SQL
    Réponses: 3
    Dernier message: 12/10/2006, 17h06
  4. SELECT sur un champ avec accent
    Par Bibicmoi dans le forum Requêtes
    Réponses: 6
    Dernier message: 21/08/2005, 12h20
  5. pb avec select sur deux champs
    Par graphicsxp dans le forum Langage SQL
    Réponses: 7
    Dernier message: 22/03/2005, 15h30

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