SQL JOIN - не понимаю - PullRequest
       0

SQL JOIN - не понимаю

1 голос
/ 07 декабря 2011

Я не могу понять, как получить нужные мне результаты.Может ли кто-нибудь помочь?

У меня есть таблицы mySql:

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

Мне нужно получить все меню с соответствующим списком блюд на определенный день, принадлежащих ресторану.Может кто-нибудь показать мне правильный запрос SQL для этого и, возможно, объяснить это ...?

Спасибо ...:)

Ответы [ 4 ]

2 голосов
/ 07 декабря 2011
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]]

Это даст вам что-то вроде этого:

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

Итак, давайте разберем части этого запроса:

--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]]
1 голос
/ 07 декабря 2011

Это вернет все поля в таблицах для ресторана '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 голосов
/ 07 декабря 2011
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');
0 голосов
/ 07 декабря 2011
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 = ?
...