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 requête AND


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    177
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 177
    Points : 106
    Points
    106
    Par défaut probleme de requête AND
    Bonjour,

    Est-ce-que quelqu'un à une explication a mon problème :

    Quand j'exécute séparement ces deux requêtes mysql me retourne un résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT v.titrevideo, v.taillevideo
    FROM videos v, decrit d
    WHERE (
    v.idvideo = d.idvideo
    AND d.idelement = '21'
    )
    GROUP BY titrevideo
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT v.titrevideo, v.taillevideo
    FROM videos v, decrit d
    WHERE (
    v.idvideo = d.idvideo
    AND d.idelement = '22'
    )
    GROUP BY titrevideo
    En gros il n'y a que l'id.element qui change

    et quand je veux regrouper ces deux requêtes en une avec un AND je n'ai aucun résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    SELECT v.titrevideo, v.taillevideo
    FROM videos v, decrit d
    WHERE (
    v.idvideo = d.idvideo
    AND d.idelement = '21'
    AND d.idelement = '22'
    )
    GROUP BY titrevideo
    Merci pour vos futures réponses...

  2. #2
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 414
    Points : 671
    Points
    671
    Par défaut
    facile, dessine des patates sur ta feuille et tu verras que tes ensembles sont disjoints

    Tu cherches dans ta derniere requete des élements tels que idelement=21 et idelement=22, ce qui est impossible si c'est un identifiant unique.

    il faut mettre un OR mais le OR est tellement peu performant, il vaut mieux lui préférer le prédicat IN qui lui est sargable (WHERE idelement IN (21,22) )

    Tu aurais également la solution de UNION (ou UNION ALL si tu n'as pas besoin d'ordre précis => le UNION "force" un tri implicite). Mais le mieux reste le IN dans ton cas.

    Deuxieme chose, ton group by ne sert à rien puisque tu ne fais pas d'opérations (SUM, AVG, etc...) sur des champs selectionnés. Il n'y a donc pas besoin de les grouper...

  3. #3
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    177
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 177
    Points : 106
    Points
    106
    Par défaut re
    Merci pour ta réponse,

    d'accord j'ai adopté ta méthode avec le IN :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT v.titrevideo, v.taillevideo
    FROM videos v, decrit d
    WHERE (d.idelement IN('21','22')
    AND
    v.idvideo = d.idvideo)
    GROUP BY titrevideo
    j'ai laissé le group by (j'aurais pu mettre un DISTINCT) sinon il me sort deux résultat alors que je n'en souhaite qu'un.

    Cependant cette requête répond à un OU. C'est à dire que j'aurai une réponse si j'ai au moins le 21 OU le 22. Comment faire si je dois avoir le obligatoirement le 21 ET le 22 pour avoir une réponse?

  4. #4
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 641
    Points
    4 641
    Par défaut
    en ajoutant quelque chose de ce genre :
    tu recuperes tous tes éléments qu'il ait 21 ou 22 comme idelement
    et il te faut qu'en regroupant par titre, tu ais 2 enregistrements

  5. #5
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2006
    Messages
    177
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2006
    Messages : 177
    Points : 106
    Points
    106
    Par défaut re
    Je vais rectifier mon tir :

    J'exécute la requête suivante :
    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
     
    SELECT v.idvideo, v.titrevideo, v.taillevideo, d.idvideo, d.idelement
    FROM videos v, decrit d
    WHERE (
    v.idvideo = d.idvideo
    AND (
    d.idelement = '9'
    )
    )
    GROUP BY titrevideo
    UNION
    SELECT v.idvideo, v.titrevideo, v.taillevideo, d.idvideo, d.idelement
    FROM videos v, decrit d
    WHERE (
    v.idvideo = d.idvideo
    AND (
    d.idelement = '5'
    )
    )
    GROUP BY titrevideo
    LIMIT 0 , 30
    J'obtient la réponse suivante :

    +------- +----------+----------+--------+-----------+
    +idvideo + titrevideo +taillevideo + idvideo + idelement +
    +------- +----------+----------+--------+-----------+
    2 marceau 2778 2 9
    1 mobylette 528 1 9
    1 mobylette 528 1 5

    J'aimerais pouvoir ne garder que le champ mobylette c'est à dire celui
    qui a les idelement 9 et 5.

Discussions similaires

  1. [SQL-SERVER] Déconnecter user d'une BD probleme de requête
    Par Sytchev3 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 07/06/2006, 08h19
  2. [SQL] probleme de requête
    Par Le Rebel dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 15/02/2006, 11h52
  3. probleme de Drag and Drop
    Par timsah dans le forum C++Builder
    Réponses: 8
    Dernier message: 03/12/2005, 09h19
  4. Probleme de requête SQL
    Par breizhoo dans le forum Langage SQL
    Réponses: 1
    Dernier message: 30/08/2005, 22h22
  5. probleme de look and feel
    Par B14 dans le forum Applets
    Réponses: 2
    Dernier message: 30/08/2005, 11h44

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