1

4 つのテーブルがあり、それぞれがタプルですID(INT),name(VARCHAR)(ID は自動インクリメントです)。食事(チーズバーガー、ハンバーガー、肉のごちそう、BLT、トマトスープ)、クラス(バーガー、ピザ、サンドイッチ、スープ)、特徴(スパイシー、ベジタリアン、グルテンフリー)、サイド(サラダ、フライドポテト、パン)の表があります。 .

食事が複数のクラスに属し、複数の特性を持ち、複数の側面を持つことができるように、タプルMeal.ID,Class.ID、を作成するために、さらに 3 つのテーブルが存在します。Meal.ID,Characteristics.IDMeal.ID,Sides.ID

次の遅延読み込みはうまくいきましたが、それが良くないことは誰もが知っています。私が欲しいのは、食事の名前、特徴、サイド、同じクラスの別の食事です。

この呼び出しはうまくいきました:

SELECT Group_concat(DISTINCT m2.meal_name SEPARATOR ',')          AS alternates,
       Group_concat(DISTINCT c.characteristic_desc SEPARATOR ',') AS
       characteristics
FROM   meal AS M
       INNER JOIN mealclass AS MC
               ON M.meal_id = MC.meal_id
       LEFT JOIN (SELECT meal_id,
                         class_id
                  FROM   drugingredient) AS MC2
              ON MC2.class_id = MC.class_id
       LEFT JOIN meals AS M2
              ON MC2.meal_id = M2.meal_id
       LEFT JOIN mealchar AS MCh
              ON MCh.meal_id = M.meal_id
       INNER JOIN characterisics AS C
               ON C.characteristic_id = MCh.characteristic_id
WHERE  M.meal_id = :meal_id
       AND M.meal_id <> M2.meal_id  

しかし、これを拡張すると、何も返されませんでした:

SELECT Group_concat(DISTINCT m2.meal_name SEPARATOR ',')          AS alternates,
       Group_concat(DISTINCT c.characteristic_desc SEPARATOR ',') AS
       characteristics,
       Group_concat(DISTINCT s.sides_desc SEPARATOR ',')          AS side_orders
FROM   meal AS M
       INNER JOIN mealclass AS MC
               ON M.meal_id = MC.meal_id
       LEFT JOIN (SELECT meal_id,
                         class_id
                  FROM   drugingredient) AS MC2
              ON MC2.class_id = MC.class_id
       LEFT JOIN meals AS M2
              ON MC2.meal_id = M2.meal_id
       LEFT JOIN mealchar AS MCh
              ON MCh.meal_id = M.meal_id
       INNER JOIN characterisics AS C
               ON C.characteristic_id = MCh.characteristic_id
       INNER JOIN mealsides AS MS
               ON M.meal_id = MS.meal_id
       INNER JOIN sides AS S
               ON S.sides_id = MS.sides_id
WHERE  M.meal_id = :meal_id
       AND M.meal_id <> M2.meal_id 

呼び出しを修正する方法、または構造化されたスキーマを改善する方法はありますか? それとも、ある程度の遅延読み込みがここに行くための最良の方法ですか (:P)?!

4

1 に答える 1