我有两个表我正在尝试输入用户可以搜索类别的例如披萨,数据库将找到该类别中的所有餐馆。我最初的想法是使表类别中的类别字段的id成为与餐馆表类别字段匹配的主键。然而,我遇到的问题是只限制一家餐馆。什么是我要问的最佳配置。
餐厅餐桌
+--------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| idRestaurant | int(11) | NO | PRI | NULL | |
| Name | varchar(45) | YES | | NULL | |
| Password | varchar(45) | YES | | NULL | |
| Email | varchar(45) | YES | | NULL | |
| Number | varchar(45) | YES | | NULL | |
+--------------+-------------+------+-----+---------+-------+
分类表
+--------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| idCategories | int(11) | NO | PRI | NULL | |
| Category | varchar(45) | YES | | NULL | |
+--------------+-------------+------+-----+---------+-------+
答案 0 :(得分:1)
您需要另一个表来存储餐馆和类别之间的关系。这个新表应该有两个字段:
Restuarant_id, category_id
这样,您可以为属于餐厅的每个类别存储一行。
答案 1 :(得分:1)
具有与另一个(restaurants.category_id
)的主要字段对应的一个表(categories.id
)的外来ID密钥是实现1:N关系的常用方式。在这种情况下,你会说"餐馆属于一个类别"或者那个"类别有很多餐馆" (您可以经常从Rails开发人员那里听到这些术语。)
如果您希望能够将多个类别分配给餐馆,将多个餐馆分配到某个类别,则它是N:N关系("拥有并属于许多"),您需要第三个表,通常称为连接表或关系表。在原始表格中,您只需拥有各自的主要ID;新表将有两个外键来配置具有类别(restaurant_categories.restaurant_id
和restaurant_categories.category_id
)的餐馆。
答案 2 :(得分:1)
您正在寻找一个联合表格restaurant_categories
,这将保持餐厅与多个类别的关系
restaurant_categories
+--------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| idCategories | int(11) | NO | | NULL | |
| idRestaurant | int(11) | NO | | NULL | |
+--------------+-------------+------+-----+---------+-------+
通过这种方式,您可以为餐馆分配多个类别,并且对于搜索,您可以在表格中使用简单连接
select distinct r.* from Restaurants r
join restaurant_categories rc on(r.idRestaurant = rc.idRestaurant )
join Categories c on (c.idCategories =rc.idCategories )
where c.Category ='pizza'
答案 3 :(得分:1)
答案 4 :(得分:1)
为什么不在表'餐厅'中添加字段categoryId?
你可以这样做:
SELECT idRestaurant FROM RestaurantTable WHERE categoryId = 1
通过这种结构,如果你想按类别进行研究,你可以这样做:
SELECT r.Name FROM categories as c
LEFT JOIN restaurants as r ON r.categoryId = c.idCategories
WHERE c.Category LIKE '%Pizza%'
答案 5 :(得分:1)
添加第三个表格RestaurantsCategories
+--------------+-------------+------+------------------------
| Field | Type | Null | Key | Default | Extra |
+--------------+-------------+------+------------------------
| idRestCat | int(11) | NO | PRI | NULL | |
| idRestaurant | int(11) | NO | | | |
| idCategories | int(11) | NO | | | |
+--------------+-------------+------+-----+---------+-------+