查询基于mysql中搜索关键字的特定表

时间:2014-06-05 10:58:48

标签: php mysql

我正在用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      |
|______|______________|

3 个答案:

答案 0 :(得分:1)

您的数据库概念非常不灵活。我认为你应该将菜肴作为信息(即表格内容)放入数据库,而不是描述单个表格的元数据。通常认为表是静态的,就像您为访问数据库及其表而编写的代码一样。如果您将美食作为不同的表格实施,则必须将每种美食硬连接到您的代码中。

以下是更好方法的建议:

  • 创建一个hotels表来存储所有酒店
  • 创建一个cuisines表来存储所有不同类型的菜肴,
  • 制作一张额外的表格,以确定酒店与美食之间的n:m关系。

示例:

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

希望这有帮助