4 つのテーブルがあり、それぞれがタプルですID(INT),name(VARCHAR)
(ID は自動インクリメントです)。食事(チーズバーガー、ハンバーガー、肉のごちそう、BLT、トマトスープ)、クラス(バーガー、ピザ、サンドイッチ、スープ)、特徴(スパイシー、ベジタリアン、グルテンフリー)、サイド(サラダ、フライドポテト、パン)の表があります。 .
食事が複数のクラスに属し、複数の特性を持ち、複数の側面を持つことができるように、タプルMeal.ID,Class.ID
、を作成するために、さらに 3 つのテーブルが存在します。Meal.ID,Characteristics.ID
Meal.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)?!