Partage
  • Partager sur Facebook
  • Partager sur Twitter

MySQL : Relations entre 2 tables

Sujet résolu
    7 juin 2010 à 18:58:04

    Bonjour à tous,
    je rencontre une petite difficulté dans la conception d'un site web (e-restaurant) s'appuyant sur une base de données sous MySQL.
    J'ai une table "menus" et une table "items" (nourriture, boisson...). Il y a plusieurs enregistrements dans chaque table.
    A la création d'un menu, je voudrais pouvoir spécifier les "items" qu'il pourra contenir. Par exemple, je créé un menu "Plat du jour" qui pourra contenir certains des items existants (mais pas tous, la liste est restreinte).
    Je ne sais pas comment gérer ça au niveau de ma base de données donc si quelqu'un a une idée... je suis preneur.

    Merci d'avance pour vos suggestions.
    Cdt.
    • Partager sur Facebook
    • Partager sur Twitter
      7 juin 2010 à 19:03:31

      Je ne connais pas tes connaissances, mais si tu avais réalisé une analyse merise, tu serais tomber sur ceci :

      menu 0,n --contenir----0,n item

      (un menu contient 0 ou n items et un item est contenu dans 0 ou n menu)
      donc tu auras une nouvelle table qui va se créer (contenir par exemple) :

      contenir
      id_contenir (non obligatoire)
      id_menu
      id_item

      Par la suite, tu vas lister les items qui sont reliés à menu grâce à cette table.

      Si tu veux plus d'information n'hésites pas
      • Partager sur Facebook
      • Partager sur Twitter
        7 juin 2010 à 19:36:24

        Merci pour cette réponse rapide.
        Juste une dernière question si tu t'y connais en requêtes SQL.
        Si, par exemple, je veux sélectionner tous les items associés à un menu, quelle sera la requête à exécuter ?

        Merci d'avance.
        • Partager sur Facebook
        • Partager sur Twitter
          7 juin 2010 à 19:55:20

          Voici l'exemple avec le menu 1
          SELECT * 
          FROM  `menu` AS m
          JOIN contenir AS c ON m.id_menu = c.id_menu
          JOIN item AS i ON c.id_item = i.id_item
          WHERE m.id_menu =1
          


          Bien sur tu peux réduire le temps d'exécution de cette requête en spécifiant les champs qui te sont uniquement utiles
          • Partager sur Facebook
          • Partager sur Twitter
            7 juin 2010 à 21:51:22

            Excellent. Pile ce que je cherchais.
            Merci encore.
            • Partager sur Facebook
            • Partager sur Twitter
              7 juin 2010 à 22:30:40

              De rien, si je peux te donner un conseil, regardes la méthode Merise qui est assez pratique pour concevoir une architecture de tables et BDD.

              Au premier abord, c'est assez complexe à comprendre la logique, mais une fois celle-ci comprise, ça devient très simple. (je n'ai malheureusement pas de tuto sous la main)

              Puis regardes ce tuto qui est assez complet sur les jointures : developpez.
              Il y a également celui du SDZ écrit par Mathéo (je ne l'ai pas lu donc je ne sais pas si il est complet) : SDZ.

              Bonne continuation dans ton site.
              • Partager sur Facebook
              • Partager sur Twitter

              MySQL : Relations entre 2 tables

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown