MYSQL, Jointures et Clés
gaerebut
Messages postés
1060
Statut
Membre
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
J'essais de raccourcir mes requêtes via des clés primaires/étrangères.
J'ai correctement configuré mes tables (innoDB + clés primaires + clés étrangères) qui sont comme ceci:
Donc ici mes deux premières tables sont reliées entre elles par une table de jointures qui permet ainsi à une recette d'avoir un nombre indéfinis d'ingrédients.
Quand je viens à modifier ou supprimer une recette ou un ingrédients, l'enregistrement dans la table de jointure se modifie/supprime bien en même temps (en cascade).
Seulement j'aurai aussi voulu savoir s'il était possible de faire un SELECT sans avoir besoin de préciser les relations entre ces 3 tables ?
Un truc du genre (Obtenir le nom de chaque ingrédient de la première recette):
Au lieux de celle-ci:
Ou encore de passer par un LEFT JOIN tout aussi long que la dernière.
Merci de votre aide ! :-)
PS: Je suis aussi ouvert à toute remarque concernant ma technique pour joindre mes recettes à mes ingrédients de manière illimité
A+
Gaerebut
J'essais de raccourcir mes requêtes via des clés primaires/étrangères.
J'ai correctement configuré mes tables (innoDB + clés primaires + clés étrangères) qui sont comme ceci:
recettes:
ID (Primary Key)
nom
etc...
ingredients:
ID (Primary Key)
nom
etc...
recettes_ingredients: (table de jointure)
ID
recette_id (Foreign Key + pointant vers l'ID de la recette en cascade delete/update)
ingredient_id (Foreign Key + pointant vers l'ID de l'ingredient en cascade delete/update)
Donc ici mes deux premières tables sont reliées entre elles par une table de jointures qui permet ainsi à une recette d'avoir un nombre indéfinis d'ingrédients.
Quand je viens à modifier ou supprimer une recette ou un ingrédients, l'enregistrement dans la table de jointure se modifie/supprime bien en même temps (en cascade).
Seulement j'aurai aussi voulu savoir s'il était possible de faire un SELECT sans avoir besoin de préciser les relations entre ces 3 tables ?
Un truc du genre (Obtenir le nom de chaque ingrédient de la première recette):
SELECT i.nom FROM ingredients i, recettes r WHERE r.id = 1
Au lieux de celle-ci:
SELECT i.nom FROM ingredients i, recette r, recettes_ingredients ri WHERE i.id = ri.ingredient_id AND r.id = ri.recette_id AND r.id = 1
Ou encore de passer par un LEFT JOIN tout aussi long que la dernière.
Merci de votre aide ! :-)
PS: Je suis aussi ouvert à toute remarque concernant ma technique pour joindre mes recettes à mes ingrédients de manière illimité
A+
Gaerebut
2 réponses
-
Bonjour,
Non vous êtes obligé de passer par des jointures donc ceci :
SELECT i.nom FROM ingredients i, recette r, recettes_ingredients ri WHERE i.id = ri.ingredient_id AND r.id = ri.recette_id AND r.id = 1
ou effectiement avec les left join -
Maintenant je suis sûr, c'est dommage que MySQL n'offre pas cette possibilité... :-p
Merci bien :-)
A+
Gaerebut
Il y a 2 règles d'or pour réussir dans la vie :
-Règle 1: ne jamais dire tout ce que l'on sait...
-Règle 2: ...