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 :

Produits, catégories et requete en double


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 10
    Par défaut Produits, catégories et requete en double
    Bonjour,

    J'aurais bien aimé un avis sur l'écriture d'une requête SQL (qui fonctionne en l'état)
    Je l'ai simplifié pour se centrer sur ma question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT DISTINCT c.categories_id, cd.categories_name
    
    FROM categories_description cd, categories c
    WHERE ( cd.`categories_name` LIKE '%hoover%'
    OR c.parent_id IN (SELECT DISTINCT categories_id FROM categories_description WHERE `categories_name` LIKE '%hoover%') ) AND c.categories_id = cd.categories_id
    La partie en gras est la même requête que la partie en rouge... N'y a-t-il pas un moyen, dans la partie en gras, de faire référence aux résultats de la requête en rouge et ainsi éviter de faire 2 fois de suite la même requête ?

    Merci d'avance pour vos conseils.

    Jérémie

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 292
    Par défaut
    Le mieux est encore de réécrire ta requête avec des jointures (ce qui devrait largement améliorer tes perfs, car le IN est catastrophique sous MySQL). Sauf erreur, ça doit donner un truc comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT DISTINCT c.categories_id, cd.categories_name
    FROM categories_description cd
      INNER JOIN categories c ON c.categories_id = cd.categories_id
      INNER JOIN categories_description pd ON c.parent_id = pd.categories_id
    WHERE cd.categories_name LIKE '%hoover%'
      OR pd.categories_name LIKE '%hoover%'

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 10
    Par défaut
    Je vais étudier les INNER JOIN que je ne maitrise pas, pour adapter la requête, car dans ta réponse, je n'ai que les résultats provenants du "OR c.parent_id IN..."

    Merci pour ta réponse.
    Jérémie

  4. #4
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 292
    Par défaut
    Citation Envoyé par james2403 Voir le message
    Je vais étudier les INNER JOIN que je ne maitrise pas, pour adapter la requête, car dans ta réponse, je n'ai que les résultats provenants du "OR c.parent_id IN..."
    Le INNER JOIN n'est qu'une autre manière d'écrire la même jointure interne que celle que tu fais dans le WHERE... par contre, d'après ce que tu dis, l'erreur doit être dans le fait que la parent_id n'est pas obligatoire ? nouvelle version :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT DISTINCT c.categories_id, cd.categories_name
    FROM categories_description cd
      INNER JOIN categories c ON c.categories_id = cd.categories_id
      LEFT JOIN categories_description pd ON c.parent_id = pd.categories_id
    WHERE cd.categories_name LIKE '%hoover%'
      OR pd.categories_name LIKE '%hoover%'

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 10
    Par défaut
    Youpi ! C'est ca !

    Maintenant je reprend mes cours, et ce soir, je suis à niveau

    Merci beaucoup pour ton aide.
    Jérémie

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

Discussions similaires

  1. Temps d'execution long d'une requete et double clic
    Par wariom dans le forum Développement Web en Java
    Réponses: 2
    Dernier message: 08/07/2008, 16h17
  2. [Requete parametrée] Double demande de parametre
    Par userB dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 27/08/2007, 10h03
  3. requete avec double jointure externe
    Par cdu dans le forum Langage SQL
    Réponses: 8
    Dernier message: 04/01/2006, 14h54
  4. requete avec double tri
    Par noarno dans le forum Access
    Réponses: 1
    Dernier message: 15/11/2005, 16h55
  5. requete SQL double références ...
    Par khardros dans le forum Langage SQL
    Réponses: 6
    Dernier message: 04/09/2004, 19h15

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