【问题标题】:MySQL relations and queryMySQL 关系和查询
【发布时间】:2014-11-22 19:51:35
【问题描述】:

我有两张桌子restaurantsmeals。餐厅有

`id`
`name`
`menu`
`image`
`text`
`address`

吃饭有

`meal_id`
`meal_name`
`meal_image`
`meal_weight`
`meal_price`
`meal_menu`

我认为将它们联系起来meal.restaurant.id。这是一个好方法还是更好地制作另一个(第三个)表并将它们连接到那里。

Can you provide me with a query how when restaurant with ID=1 is selected to show meals for this restaurant only.现在我想在meal_menu 行中保存餐厅ID。

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    如果您认为一家餐厅有很多餐,而一餐只有一家餐厅

    那你应该试试餐厅餐桌

     `id`
     `name`
     `menu`
     `image`
     `text`
     `address`
    

    餐桌

      `meal_id`
      `meal_name`
      `meal_image`
      `meal_weight`
      `meal_price`
      `meal_menu
      `restaurant_id`
    

    或者,如果您认为一间餐厅有很多餐,而一餐有很多餐厅

    那你应该试试餐厅餐桌

     `id`
     `name`
     `menu`
     `image`
     `text`
     `address`
    

    餐桌

      `meal_id`
      `meal_name`
      `meal_image`
      `meal_weight`
      `meal_price`
      `meal_menu
    

    和 restaurant_meal

      `restaurant_id`
      `meal_id`
    

    restaurant_meal 表只包含外键引用餐厅表和餐表

    这取决于你使用哪一个......你可以使用任何一个。它只是取决于要求

    【讨论】:

    • 这将是one restaurant has a many meal and one meal has only one restaurant
    【解决方案2】:

    创建一个数据透视表,例如

    CREATE TABLE meal_restaurant
    (
      meal_id int not null,
      restaurant_id int not null,
      primary key (meal_id, restaurant_id),
      foreign key (meal_id) references meals (meal_id),
      foreign key (restaurant_id) references restaurants (id) 
    );
    

    现在为您选择的特定餐厅选择所有餐点

    SELECT m.meal_id, meal_name, meal_image, meal_weight, meal_price
      FROM meals m JOIN meal_restaurant mr
        ON m.meal_id = mr.meal_id
     WHERE restaurant_id = 1
    

    这是一个SQLFiddle演示

    【讨论】:

    • 所以又多了一张桌子,里面放着meal_id和restaurant_id
    • 无论如何,如果我再使用一张桌子,我就不需要meal.menu 行。我对这个领域的想法是将它与餐厅 ID 联系起来。我不使用那里的任何数据。
    • @JordanVit 好的。然后摆脱这个menu 列,你就很好了。祝你好运。
    【解决方案3】:

    根据我对您的问题的理解,您应该将restaurantsid 字段设为主键,将mealmeal_id 字段设为引用id 字段的外键。

    【讨论】:

    • 不,因为我会为meal 餐桌上的 2 家餐厅提供所有餐点。这就是为什么我不能通过 ID 选择它们。我为restaurant.id 设置了restaurant id 主键和meal_menu 外键
    • 我不太确定我是否理解。您说您想将餐点连接到给定的餐厅,但无法通过 ID 选择餐点?
    • 餐桌 meals 将举行所有餐点。行meals_menu 将包含12,其中1 和2 是餐厅。因此,当我选择餐厅 1 (id=1) 时,我需要一些查询来向我展示所有具有 meal.menu=1 的餐点。我希望现在有点清楚还是我的所有概念都错了?
    • meal.menu 表示您的meal 表中有一个名为menu 的字段,但根据您的问题,情况并非如此。您能否明确说明您在这里指的是哪个领域?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-20
    • 2011-07-26
    相关资源
    最近更新 更多