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 :

Plusieurs conditions sur une meme table (jointure)


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
    Décembre 2005
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 32
    Par défaut Plusieurs conditions sur une meme table (jointure)
    bonsoir,

    Ca fait 2 heures que je me creuse la tete pour ce probleme:

    Dans le but d'un moteur de recherche selon des criteres multiples, je souhaiterai recuperer les annonces qui ont 2 critères simultanées

    table annonce

    id - nom

    table critere

    annonce - contenu

    si je met qu'un critere ca marche: (sortir les annonces avec critere contenu=2)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT annonce.* FROM annonce 
    INNER JOIN critere ON annonce.id=critere.annonce AND (critere.contenu='2')
    si je met 2 critere ca marche pas: (sortir les annonces avec critere contenu=2 et critere contenu=6 en simultané)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT annonce.* FROM annonce 
    INNER JOIN critere ON annonce.id=critere.annonce 
    AND (critere.contenu='2' and critere.contenu='6')
    Je suppose que ce dernier code est assez mal fait voir un peu débile puisque je demande 2 conditions differentes sur le meme champs mais c'est le seul moyen que j'ai trouvé pour combiner 2 critères

    si je me suis mal exprimé voila un exemple:

    table critere
    --------------------

    annonce | contenu
    ---------------------
    1 | 2
    2 | 4
    1 | 6

    je voudrait que ca me ressorte l'annonce N°1 ayant le critere contenu 2 et contenu 6 obligatoirement

    Es ce que quelqu'un peut m'aider pour reecrire ce dernier code (avec 2 criteres)

    Merci

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 32
    Par défaut
    ah j'ai trouvé en faisant comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT annonce.* FROM annonce 
    INNER JOIN critere as a ON annonce.id=a.annonce AND a.contenu='2' 
    INNER JOIN critere as b ON annonce.id=b.annonce AND b.contenu='6'
    double jointure avec alias


    Mon probleme est donc résolu, mais gros hic c'est incroyablement lent avec seulement 2 inner join sachant que mon moteur de recherche pourra avoir 3-4 critères, y a t'il moyen d'optimiser ça pour de la rapiditée ?

    sachant que la annonce.* est deja optimise dans mon code (annonce.id,annonce.nom, ...)

    Merci

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 104
    Par défaut
    Je dis peut-être une bétise mais pourquoi pas faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT annonce.* FROM annonce
    INNER JOIN ( SELECT cedonttuasbesoin FROM critere WHERE contenu = 2 AND contenu = 6 ) ON annonce.id=a.annonce
    Ca parait beaucoup plus léger ?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 32
    Par défaut
    Merci Zeflex, ça parait plus léger mais j'ai essayer de l'appliquer et il me sort

    Warning: mysql_num_rows(): supplied argument is not a valid MySQ ...

  5. #5
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 818
    Billets dans le blog
    14
    Par défaut
    Ton message d'erreur vient de php, pas de MySQL !
    Il signifie que l'argument que tu as mis entre parenthèses dans la fonction mysql_numrows n'est pas le résultat d'un mysql_query.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    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 !

  6. #6
    Membre confirmé
    Inscrit en
    Octobre 2008
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 104
    Par défaut
    Désolé j'ai fais une faute :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT annonce.* FROM annonce
    INNER JOIN ( SELECT cedonttuasbesoin FROM critere WHERE contenu = 2 AND contenu = 6 ) AS a ON annonce.id=a.annonce
    J'ai oublié le AS A.

    Sinon quel est ton code actuel si cela ne fonctionnes toujours pas ?

Discussions similaires

  1. Double jointure sur une meme table
    Par ecarbill dans le forum Requêtes
    Réponses: 7
    Dernier message: 17/02/2011, 18h36
  2. 2 jointures sur une meme table
    Par amamildor dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/10/2007, 17h24
  3. plusieurs COUNT sur une seule table avec conditions différentes
    Par dingoth dans le forum Administration
    Réponses: 9
    Dernier message: 20/12/2006, 10h13
  4. [MySQL] Plusieurs jointures sur une même table
    Par stephyyr dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/06/2006, 14h24
  5. [debutant]Modelistation > plusieurs fk d'une meme table
    Par christophebmx dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 15/11/2004, 15h44

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