我正在用PHP创建一个搜索门户,用户可以从中搜索特定的菜肴。在MySQL中,我为每种菜肴提供了多个餐桌,并提供了各自提供美食的酒店名称。例如,在表
中如何根据菜肴搜索关键字查询特定菜表?
因此,如果用户输入“墨西哥”作为搜索查询,它如何连接到“Table2 - 墨西哥”并从此表中返回酒店名称?
Table1 - Chinese
_______________________
| id | hotelname |
|______|______________|
| 1 | hotel1 |
| 2 | hotel2 |
| 3 | hotel3 |
| 4 | hotel4 |
| 5 | hotel5 |
|______|______________|
Table2 - Mexican
_______________________
| id | hotelname |
|______|______________|
| 1 | hotel1 |
| 2 | hotel2 |
| 3 | hotel3 |
| 4 | hotel4 |
| 5 | hotel5 |
|______|______________|
Table3 - Pizza
_______________________
| id | hotelname |
|______|______________|
| 1 | hotel1 |
| 2 | hotel2 |
| 3 | hotel3 |
| 4 | hotel4 |
| 5 | hotel5 |
|______|______________|
答案 0 :(得分:1)
您的数据库概念非常不灵活。我认为你应该将菜肴作为信息(即表格内容)放入数据库,而不是描述单个表格的元数据。通常认为表是静态的,就像您为访问数据库及其表而编写的代码一样。如果您将美食作为不同的表格实施,则必须将每种美食硬连接到您的代码中。
以下是更好方法的建议:
hotels
表来存储所有酒店cuisines
表来存储所有不同类型的菜肴,示例:
hotels: id, name, address, city, telno, email
cuisine: id, name, description
rel: cuisine, hotel (where both are the foreign keys to the
id columns of the respective tables above)
另见:
答案 1 :(得分:0)
您可以查看SQL UNION。但是,您可以尝试使用normalization来最小化冗余并简化查询,而不是使用具有相同字段的多个表。
类似的东西:
Hotel Table
-----------------------------
id | hotelname | categoryID
------------------------------
1 | hotel name 1 | 1
2 | hotel name 2 | 2
-----------------------------
Category Table
-------------------
id | categoryname
-------------------
1 | chinese
2 | mexican
------------------
查询简单如下:
SELECT a.hotelname, b,categoryname
FROM hotel_table a
LEFT JOIN category_table b
ON a.categoryID = b.id AND b.categoryname LIKE '%mexican%';
答案 2 :(得分:0)
您可能想要检查此问题以创建多对多关系:
many-to-many and many-to-many intersections
我想你想要达到的目标是这样的:
Table1 - Hotel
_______________________
| id | hotelname |
|______|______________|
| 1 | hotel1 |
| 2 | hotel2 |
| 3 | hotel3 |
| 4 | hotel4 |
| 5 | hotel5 |
|______|______________|
Table2 - Cuisine
____________________________________________
| id | cuisine_name | keywords |
|______|______________|____________________|
| 1 | Chinese | Shandong,Noodles,. |
| 2 | Mexican | Tacos,Beans,... |
| 3 | Itarian | Pizza,Pasta,.. |
|______|______________|____________________|
Table3 - HotelCuisine
___________________________________
| id | hotel_id | cuisine_id |
|______|____________|______________
| 1 | 1 | 2 |
| 2 | 1 | 3 |
| 3 | 2 | 1 |
| 4 | 2 | 2 |
| 5 | 3 | 3 |
|______|____________|_____________|
SQL:
SELECT hotelname, cuisine_name FROM Hotel
INNER JOIN HotelCuisine ON Hotel.id = HotelCuisine.hotel_id
INNER JOIN Cuisine ON Cuisine.id = HotelCuisine.cuisine_id
WHERE keywords like '%pizza%'
结果:
________________________________________
| hotelname | cuisine_name |
|_______________|______________________|
| hotel1 | Itarian |
| hotel3 | Itarian |
|_______________|______________________|
DEMO:http://sqlfiddle.com/#!2/961de/1
希望这有帮助