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 :

Recettes avec ingrédients spécifiés seulement


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 3
    Points : 3
    Points
    3
    Par défaut Recettes avec ingrédients spécifiés seulement
    Bonjour à tous,

    C'est mon premier message sur ce forum, je m'en remet à vous car après de multiples recherches, je n'ai pas trouvé le moyen de trouver une réponse à ma question sur le net.

    Mon système est constitué de trois tables, l'une comportant des recettes de cuisine, l'une comportant des ingrédients, et la troisième comportant la liaison entre ces deux dernières.

    Je voudrais obtenir les recettes correspondants aux id d'ingrédients fournis seulement. Exemple, si je sélectionne des fraises et des framboises, je dois obtenir ma tarte au fruits rouge. Par contre, si je sélectionne aussi une orange en plus des fraises et des framboises, plus aucune recette ne dois m'être proposée.

    Pour l'instant ma requête est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT * FROM recette AS r
    INNER JOIN liaison_ingr_recette AS rhi
    ON (rhi.recette_liaison = r.id_recette)
    WHERE rhi.ingr_liaison IN (27,33, .... [ ID INGREDIENTS ] )
    GROUP BY r.id_recette
    Néanmoins, elle n'est pas restrictive, , si je reprend l'exemple cité plus haut, elle sélectionnera la tarte au fruit rouge mais aussi la tarte au agrumes, au lieu de ne sélectionner aucune recette.

    J'espère que avoir été assez clair, mon projet est à l'arrêt depuis près d'un mois à cause de cette requête qui coince =/

    Merci d'avance

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    rajoutez à la fin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    having count(distinct r.id_recette) = nbr_conditions
    Pour une explication sur le having :
    http://sqlpro.developpez.com/cours/sqlaz/ensembles/#L2

  3. #3
    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,
    En fait le problème est assez simple, tu veux sélectionner toutes les recettes qui sont en liaison avec toutes les lignes d'une vue de la table ingrédients restreinte aux ingrédients choisis.
    La difficulté réside en ce que ce nombre d'ingrédients est variable.
    Tu y étais presque avec ta requête
    Code MySQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT lesnomsdecolonneskivontbienetpasétoile FROM recette AS r
    INNER JOIN liaison_ingr_recette AS rhi
    ON (rhi.recette_liaison = r.id_recette)
    WHERE rhi.ingr_liaison IN (27,33, .... [ ID INGREDIENTS ] )
    GROUP BY r.id_recette
    HAVING COUNT(DISTINCT rhi.ingr_liaison)=(SELECT COUNT(*) FROM ingredient WHERE ingredient.id IN (27,33, .... [ ID INGREDIENTS ] )

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Merci beaucoup à vous tous j'ai enfin la solution et désolé pour le temps de réponse j'étais pas mal overbooké !


    SELECT * FROM recette AS r
    INNER JOIN liaison_ingr_recette AS rhi
    ON (rhi.recette_liaison = r.id_recette)
    WHERE rhi.ingr_liaison IN (42,34,27,...) GROUP BY r.id_recette
    HAVING COUNT(DISTINCT rhi.ingr_liaison) = (SELECT COUNT(*) FROM ingredient WHERE ingredient.id_ingredient IN (42,34,27,...)

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Pourquoi refaire une sous-requete sachant que vous savez d'emblez combien d'ingrédient vous attendez ?

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2012
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    C'est pas faux je vais voir ça =) Merci

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

Discussions similaires

  1. Dans un div avec overflow, avoir seulement la scrollbar verticale
    Par Richard Trigaux dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 26/07/2012, 12h39
  2. Travailler avec des entiers seulement
    Par sivaller dans le forum OpenGL
    Réponses: 4
    Dernier message: 29/03/2008, 18h56
  3. rediriger les résultats d'un programme dans un fichier avec format spécifié
    Par condor_01 dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 27/11/2007, 20h55
  4. [SQL] Recettes et ingrédients
    Par Takusen dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 30/09/2007, 20h50
  5. demmarage avec compte invité seulement!
    Par devlopassion dans le forum Windows XP
    Réponses: 5
    Dernier message: 24/07/2007, 02h02

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