2011-12-07 14 views
1

私は必要な結果を得る方法を理解できません。助けてもらえますか?SQL JOIN - 取得しない

これらは私が持っているMySQLのテーブルです:

restaurant   menu     menu_has_dishes    dishes 
----------   ----     ---------------    ------ 
id (k)  <-> restaurantid   id (k)      title 
name     id (k)  <->  menuid      price 
        date     dishid    <->  id (k) 

私はレストランに属する、特定の日のための料理のそれぞれのリストですべてのメニューを取得する必要があります。誰も私にそれのための適切なSQLクエリを表示し、多分それを説明することができます...?

--Tell the database what fields you care about 
SELECT d.title, d.price 

--Tell it what table to start with, and give it a nickname "d" 
FROM dishes d 

--join to menu_has_dishes so we know what menus contain each dish 
JOIN menu_has_dishes md ON d.id = md.dishid 

--join to menu so we know what restaurant has each menu 
JOIN menu m ON md.menu_id = m.id 

--finally, tell it what restaurant to look at 
WHERE m.restaurantid = [[your restaurant id goes here]] 
+3

は、これは宿題によく似ています。それが宿題タグを追加してください。 – NealB

+0

私は恐れています...;( – Hein

答えて

2
SELECT d.title, d.price 
FROM dishes d 
JOIN menu_has_dishes md ON d.id = md.dishid 
JOIN menu m ON md.menu_id = m.id 
WHERE m.restaurantid = [[your restaurant id goes here]] 

おかげで...これは、日付のレストラン '5'のテーブルのすべてのフィールドを返します。

SELECT * 
FROM restaurant r 
INNER JOIN menu m ON (r.id=m.restaurantid) 
INNER JOIN menu_has_dishes md ON (m.menuid=d.menuid) 
INNER JOIN dishes d ON (md.dishid=d.id) 
WHERE r.id = 5 
AND m.date = '2011-12-07' 

あなたはただ、これは適切な情報を取得する場合があります

SELECT r.id, r.name, m.date, d.title, d.price 
+0

質問の各行が何を行っているかを説明するために+1 –

+0

@PaigeCook私の努力を知ってうれしいです:) – ean5533

+0

説明してくれてありがとう、私はメニューからデータが必要です食器類... – Hein

1

----------- 
|Fish|1.00| 
|Ham |2.00| 
|... |... | 
----------- 

は、それでは、このクエリの部分を分解してみましょう。これはあなたにこのような出力に何かを与えるだろう:)

0
SELECT res.id, res.name,m.id,m.date FROM restaurant res 
JOIN menu m ON m.restaurantid = res.id 
JOIN menu_has_dishes mhd ON mhd.menuid = m.id 
JOIN dishes d ON d.id = mhd.dishid 
WHERE res.id = ? 
0
SELECT r.name, m.date, d.title, d.price 
FROM 
    restaurant r 
    INNER JOIN menu m 
     ON r.id=m.restaurantid 
    INNER JOIN menu_has_dishes md 
     ON m.id=md.menuid 
    INNER JOIN dishes d 
     ON md.dishid=d.id 
WHERE 
    r.id = 123  -- OR r.name = 'abc' 
    AND 
    m.date = CONVERT(date,'2011/12/06');