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 :

Récuperer une liste de recettes !


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier Avatar de ForgetTheNorm
    Homme Profil pro
    Docteur en informatique
    Inscrit en
    Novembre 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Docteur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 133
    Points : 76
    Points
    76
    Par défaut Récuperer une liste de recettes !
    Bonjour à tous

    Je cherche à me remettre au SQL, et j'ai déjà quelques soucis.
    Je possède une unique table (pour simplifier), contenant 2 colonnes : une liste d'identifiants de recettes, et une liste d'identifiants d'ingrédients. Cette base représente la liste des ingrédients nécessaires pour l'exécution d'une recette.

    Je cherche à trouver les recettes comprenant UNIQUEMENT une liste d'ingrédients.
    Mes petites pistes sont :
    - Obtenir la liste des recettes contenant au moins un ingrédient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT recette
    FROM rec_ingr
    WHERE (ingr = 1) OR (ingr = 2) OR (ingr = 3)
    GROUP BY recette
    - Obtenir la liste des recettes possédants 3 ingrédients :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT recette, COUNT(ingr)
    FROM rec_ingr
    GROUP BY recette
    HAVING COUNT(ingr) = 3
    - Obtenir la liste des recettes possédant au moins ces 3 ingrédients :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT recette
    FROM rec_ingr
    WHERE (ingr = 1) OR (ingr = 2) OR (ingr = 3)
    GROUP BY recette
    HAVING COUNT(ingr) = 3
    ... Je me doute bien qu'il doit y avoir une jointure à faire, mais je ne trouve pas comment faire !

    Merci de m'éclairer...

    Pierre

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut
    Citation Envoyé par ForgetTheNorm Voir le message
    - Obtenir la liste des recettes contenant au moins un ingrédient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT recette
    FROM rec_ingr
    WHERE (ingr = 1) OR (ingr = 2) OR (ingr = 3)
    GROUP BY recette
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT recette, COUNT(ingr) FROM rec_ingr
    GROUP BY recette
    HAVING COUNT(ingr) >= 1
    Citation Envoyé par ForgetTheNorm Voir le message
    - Obtenir la liste des recettes possédants 3 ingrédients :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT recette, COUNT(ingr)
    FROM rec_ingr
    GROUP BY recette
    HAVING COUNT(ingr) = 3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT recette, COUNT(ingr) FROM rec_ingr
    GROUP BY recette
    HAVING COUNT(ingr) = 3
    Citation Envoyé par ForgetTheNorm Voir le message
    - Obtenir la liste des recettes possédant au moins ces 3 ingrédients :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT recette
    FROM rec_ingr
    WHERE (ingr = 1) OR (ingr = 2) OR (ingr = 3)
    GROUP BY recette
    HAVING COUNT(ingr) = 3
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT recette, COUNT(DISTINCT ingr) FROM rec_ingr
    WHERE ingr IN (1,2,3)
    GROUP BY recette
    HAVING COUNT(ingr) >= 3
    Citation Envoyé par ForgetTheNorm Voir le message
    ... Je me doute bien qu'il doit y avoir une jointure à faire, mais je ne trouve pas comment faire !
    Moi je ne vois pas de jointures

  3. #3
    Membre régulier Avatar de ForgetTheNorm
    Homme Profil pro
    Docteur en informatique
    Inscrit en
    Novembre 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Docteur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 133
    Points : 76
    Points
    76
    Par défaut
    Bonjour.

    Merci pour les quelques modifications. Ce n'est pas vraiment ce que je voulais, mais ça m'a au moins permis de me rappeler le IN.

    Citation Envoyé par okoweb Voir le message
    Moi je ne vois pas de jointures
    Normal ! Les précédentes requêtes fonctionnent, mais je n'arrive pas à en faire une plus compliquée...
    Citation Envoyé par ForgetTheNorm Voir le message
    Je cherche à trouver les recettes comprenant UNIQUEMENT une liste d'ingrédients.
    Quelqu'un a-t-il une idée ?

    Pierre

  4. #4
    Membre régulier Avatar de ForgetTheNorm
    Homme Profil pro
    Docteur en informatique
    Inscrit en
    Novembre 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Docteur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 133
    Points : 76
    Points
    76
    Par défaut
    Bonjour

    Les réponses se faisant rares, je vais tenter d'expliquer d'une autre manière.
    Voici une table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    recette | ingredient
    1       | 1
    1       | 2
    1       | 2
    2       | 1
    2       | 2
    3       | 2
    3       | 2
    3       | 3
    4       | 1
    4       | 2
    4       | 2
    4       | 3
    Je veux récupérer l'ensemble des recettes possédant uniquement les ingrédients (1,2,2). La requête doit être capable de ne pas prendre en compte :
    - les recettes où il manque au moins 1 ingrédient (recette 2, 3)
    - les recettes où il y a tous les ingrédients mais d'autres en plus (recette 4)
    En d'autres termes, la requête doit retourner la recette 1.

    Pierre

  5. #5
    Membre averti Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Points : 301
    Points
    301
    Par défaut
    Bonjour.

    Si vous avez la possibilité de modifier la structure du schéma, :
    Faire une table RECETTE, une table INGREDIENTS avec une table d'association au milieu RECETTE<->INGREDIENTS avec dans cette table d'association la quantité nécessaire d'un ingrédient particulier pour une recette particulière.

    Cela pourrait simplifier les choses.
    define: Programmeur : Celui qui résout un problème que vous n'aviez pas, d'une façon que vous ne comprenez pas.

  6. #6
    Membre régulier Avatar de ForgetTheNorm
    Homme Profil pro
    Docteur en informatique
    Inscrit en
    Novembre 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Docteur en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2006
    Messages : 133
    Points : 76
    Points
    76
    Par défaut
    Citation Envoyé par GyZmoO Voir le message
    Bonjour.

    Si vous avez la possibilité de modifier la structure du schéma, :
    Faire une table RECETTE, une table INGREDIENTS avec une table d'association au milieu RECETTE<->INGREDIENTS avec dans cette table d'association la quantité nécessaire d'un ingrédient particulier pour une recette particulière.

    Cela pourrait simplifier les choses.

    Bonjour

    J'ai réussi avec ta méthode. Je suis parti d'une table
    (recette, ingr, c_ingr) qui donne le "nombre" d'ingrédient (que tu appelles "quantité" dans ton précédent post) au lieu de tous les lister.

    Ensuite, avec la requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT recette
    FROM rec_ingr
    WHERE recette IN
    (
      SELECT recette
      FROM rec_ingr
      WHERE (ingr = 1 AND c_ingr = 1)
        AND (ingr = 2 AND c_ingr = 2)
      GROUP BY recette
      HAVING SUM(recette) = 3
    )
    GROUP BY recette
    HAVING SUM(recette) = 3
    Ce n'est pas très beau, mais ça a le mérite de fonctionner.

    Pierre

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

Discussions similaires

  1. Struts JSP Récuper une liste JSP vers Java
    Par Anthone dans le forum Struts 1
    Réponses: 0
    Dernier message: 11/10/2012, 10h00
  2. [Regex][Java] Récuperer une liste de mot d'un texte
    Par Dnasty dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 23/07/2010, 19h19
  3. Réponses: 1
    Dernier message: 23/10/2009, 16h02
  4. Récuperer une liste à choix multiple
    Par madjidri dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 10/02/2009, 11h30
  5. [JDOM] [XPATH] Récuperer une liste d'attribut
    Par lil_k123 dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 31/05/2007, 16h10

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