首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用MySQL显示多到多个关系

如何使用MySQL显示多到多个关系
EN

Stack Overflow用户
提问于 2019-07-02 17:58:57
回答 3查看 668关注 0票数 0

我试图使用PHP和MYSQL在网站上显示信息,显示事件可以发生的所有位置,以及每个位置所包含的设施。例如,公园(location1)可能包含厕所(facility1)、秋千(facility3)和滑梯(facility4)。

代码语言:javascript
复制
              Location1    Location2    Location3    Location4
Facility1         x            x
Facility2                                   x            x
Facility3         x                                      x
Facility4         x            x

首先,我不确定在MySQL中将这些表显示为表的最佳方法,以及如何在网页上使用PHP调用清楚地显示这些内容。

如能提供任何帮助,将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-07-02 19:23:48

数据库模式

我建议您在数据库中创建3个表:

  1. 位置
  2. 设施
  3. location_facility

位置表

代码语言:javascript
复制
+----+------------+
| id |    name    |
+----+------------+
|  1 | location_1 |
|  2 | location_2 |
+----+------------+

设施表

代码语言:javascript
复制
+----+------------+
| id |    name    |
+----+------------+
|  1 | facility_1 |
|  2 | facility_2 |
|  3 | facility_3 |
+----+------------+

数据透视表(location_facility)

代码语言:javascript
复制
+-------------+-------------+
| location_id | facility_id |
+-------------+-------------+
|           1 |           1 |
|           1 |           2 |
|           2 |           1 |
|           2 |           3 |
+-------------+-------------+

因此,在枢轴表中,您可以存储所需的信息。

PHP应用程序元代码

要用纯PHP从数据库中获取数据,可以使用PDO扩展。

代码语言:javascript
复制
    $sql = 'SELECT locations.name as loc_name, 
                   facilities.name as facility_name 
            FROM location_facility
            INNER JOIN locations ON locations.id = location_facility.location_id
            INNER JOIN facilities ON facilities.id = location_facility.facility_id';

    foreach ($conn->query($sql) as $row) {
        print $row['loc_name'] . "\t";
        print $row['facility_name'] . "\n";
    }
票数 1
EN

Stack Overflow用户

发布于 2019-07-02 18:05:33

在数据库中,它只是另外一个表,保存了相关表中的两个PK。

要显示,您可以选择一个“主细节”视图:从任一表(主表)中选择一个项,显示来自另一个表的所有相关记录(详细信息)。

票数 0
EN

Stack Overflow用户

发布于 2019-07-10 13:10:39

正如其他人所评论的那样,这些表格需要第三个枢轴表来连接设施,而位置表为此非常感谢。然而,出现的下一个问题是使用这些表格并将它们连接起来,以便通过设施进行搜索。因此,SQL查询将设施分组为视图中的一列,并与location表中的所有信息一起使用。

代码语言:javascript
复制
CREATE VIEW locations AS
SELECT location.*, group_concat(facilities.FacilityName separator ',') AS facility_name 
FROM location_facility 
INNER JOIN location 
ON location.LocationID = location_facility.LocationID
INNER JOIN facilities 
ON facilities.FacilitiesID = location_facility.FacilitiesID
GROUP BY location.LocationName  
ORDER BY location.LocationID ASC

此表可以使用

代码语言:javascript
复制
SELECT *
FROM locations
WHERE facility_name LIKE %Toilet% AND facility_name LIKE %Parking%

这解决了我的问题,并允许数据显示在网页上,这正是我想要的。

再次感谢大家的评论和帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56857852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档