SQL : Rechercher une valeur dans plusieurs champs

Fermé
emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024 - Modifié le 26 août 2022 à 18:27
 Tessel75 - 28 août 2022 à 15:27

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

A voir également:

4 réponses

jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705
26 août 2022 à 18:40

Bonjour

Bonjour

Tu peux écrire une requête contenant plusieurs conditions séparées par le mot clé or.


0
emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024 20
26 août 2022 à 18:57

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.... !

0
yg_be Messages postés 23350 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 novembre 2024 1 554
27 août 2022 à 11:36

bonjour,

Si tu veux faire plus propre, il faut peut-être remettre en cause la structure de tes tables.

0
emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024 20 > yg_be Messages postés 23350 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 novembre 2024
Modifié le 28 août 2022 à 09:00

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 ?

0
yg_be Messages postés 23350 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 novembre 2024 1 554 > emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024
28 août 2022 à 09:19

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?

0
yg_be Messages postés 23350 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 novembre 2024 1 554 > emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024
28 août 2022 à 10:50

Tu as construit ta table en fonction du rapport à produire, comme tu ferais dans Excel.

Au lieu de supprimer une recette, pourquoi ne pas la marquer comme "non disponible"?

0
emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024 20 > yg_be Messages postés 23350 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 novembre 2024
28 août 2022 à 14:10

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 

0
emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024 20
26 août 2022 à 19:06

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
0

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.

0