SQL : Rechercher une valeur dans plusieurs champs
Tessel75 -
Bonjour,
Dans une table d'une base de donnée Sql, existe t-il un moyen de retrouver une valeur qui pourrait se trouver dans plusieurs champs ?
Ma table menus_composition est composée ainsi :
Les champs "midi_entree", "midi_plat", "soir_dessert".... stockent l'id_recette de la table"recettes" à laquelle ils sont liés par une contrainte de clé étrangère.
J'aimerai pouvoir compter l'éventuelle présence de la recette n°212 soit dans midi_entree, soit dans midi_plat, soit dans etc, etc...
Autant je sais rechercher dans un champs mais je ne sais pas comment faire dans plusieurs !
Merci d'avance pour votre aide.
Linux / Chrome 104.0.0.0
- SQL : Rechercher une valeur dans plusieurs champs
- Logiciel sql - Télécharger - Bases de données
- Requete sql pix - Forum PHP
- Additions et multiplication dans des requêtes SQL ✓ - Forum MySQL
- Sql query download - Télécharger - Gestion de données
- Ora-00933: la commande sql ne se termine pas correctement ✓ - Forum Oracle
4 réponses
Bonjour
Bonjour
Tu peux écrire une requête contenant plusieurs conditions séparées par le mot clé or.
J'y ai bien pensé mais j'étais sûr qu'il existait un truc plus propre, parce-que là ça fait 8 x OR.... !
Oui, j'y ai pensé mais je ne vois pas bien comment ?
La première table "menus" contient : id_menu, nom, et notes
La deuxième table "menu_composition" contient l'id_menu comme lien entre les deux tables et les id_recettes des plats servis en entree, plat et dessert sur les 2 repas de la journée... avec pour chaque repas le nombre de convives. (cf image postée dans ma question initiale).
On ne peut pas faire plus simple, à moins de n'en faire qu'une avec une redondance du nom et notes ?
La définition des tables ne doit pas être "simple". Elle doit permettre de les utiliser correctement, et, si possible, simplement. Tu as fait une construction simple qui conduit à une utilisation complexe.
Je ne peux pas faire de suggestion sans que tu décrives de quoi il s'agit, et ce que tu fais avec les données.
La composition du menu inclut des dates et des quantités, je trouve cela bizarre. La composition du menu change chaque jour?
Comme le but est de sortir une liste de courses et un planning pour un weekend, les informations dans les tables menus, menus_composition (et d'autres tables qui n'existent pas encores comme courses par ex) sont appelées à être supprimées régulièrement.... aucun intérêt en effet de les conserver.
Par contre il n'en est pas de même pour les aliments et les recettes. Je pourrais ne pas programmer de suppression de recettes et économiser ainsi une requête tordue, mais je voulais éviter de passer par phpmyadmin pour virer une recette doublon ou une qu'on déciderait de ne plus faire pour x raison
Un truc comme ça ?
SELECT recettes.*,( SELECT Count(*) FROM menus_composition AS M WHERE M.midi_entree = recettes.id_recette OR M.midi_plat = recettes.id_recette OR M.midi_dessert = recettes.id_recette OR M.midi_autre = recettes.id_recette OR M.soir_entree = recettes.id_recette OR M.soir_plat = recettes.id_recette OR M.soir_dessert = recettes.id_recette OR M.soir_autre = recettes.id_recette ) AS Nb_menus FROM recettes ORDER BY type
Bonjour,
Comme le dit très bien YeBe, la question n'est pas d'avoir des tables simples, ni même d'avoir des liaisons simples, mais d'avoir des tables qui permettent de limiter au maximum la saisie de données nouvelles.
Ainsi de ce que j'ai compris de ton exposé, je ferais comme suit avec les champs indiqués :
Table Repas = > [IdRepas], [Date], [Heure (Midi/Soir)],
Table Menus= > [IdMenus], [IdmPlats],
Table Plats= > [IdPlats], [Recette],
Table RepasMenus = > [IdrmRepas],[IdrmMenus], [Quantité], Avec [IdrmRepas]=[IdRepas] et [IdrmMenus] = [IdMenus] , cette table te permet d'enregistrer facilement les quantités servies de chacun des menus, chaque jour et pour chacun des repas midi et soir, et en même temps peut te servir à rebours pour savoir quand a été servis tel ou tel menu, et combien
ou bien Table RepasPlats= > [IdrpRepas],[IdrpPlats], [Quantité], Avec [IdrpRepas]=[IdRepas] et [IdrpPlats] = [IdPlats] , qui te permet d'enregistrer facilement les quantités servies de chacun des plats, chaque jour et pour chacun des repas midi et soir, et en même temps peut te servir à rebours pour savoir quand a été servis tel ou tel plat et combien
Ainsi, quand tu veux savoir quand et combien de tel ou tel plat a été servi, il suffit d'appeler le plat et la recette choisie et de lui faire cracher soit la quantité soit les dates et le moment, midi ou soir.
Bon courage. je répète : la question n'est pas d'avoir des tables simples, ni même d'avoir des liaisons simples, mais d'avoir des tables qui permettent de limiter au maximum la saisie de données nouvelles pour pouvoir en extraire les données qu'on veut obtenir.