我试图使用PHP和MYSQL在网站上显示信息,显示事件可以发生的所有位置,以及每个位置所包含的设施。例如,公园(location1)可能包含厕所(facility1)、秋千(facility3)和滑梯(facility4)。
Location1 Location2 Location3 Location4
Facility1 x x
Facility2 x x
Facility3 x x
Facility4 x x首先,我不确定在MySQL中将这些表显示为表的最佳方法,以及如何在网页上使用PHP调用清楚地显示这些内容。
如能提供任何帮助,将不胜感激。
发布于 2019-07-02 19:23:48
数据库模式
我建议您在数据库中创建3个表:
位置表
+----+------------+
| id | name |
+----+------------+
| 1 | location_1 |
| 2 | location_2 |
+----+------------+设施表
+----+------------+
| id | name |
+----+------------+
| 1 | facility_1 |
| 2 | facility_2 |
| 3 | facility_3 |
+----+------------+数据透视表(location_facility)
+-------------+-------------+
| location_id | facility_id |
+-------------+-------------+
| 1 | 1 |
| 1 | 2 |
| 2 | 1 |
| 2 | 3 |
+-------------+-------------+因此,在枢轴表中,您可以存储所需的信息。
PHP应用程序元代码
要用纯PHP从数据库中获取数据,可以使用PDO扩展。
$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";
}发布于 2019-07-02 18:05:33
在数据库中,它只是另外一个表,保存了相关表中的两个PK。
要显示,您可以选择一个“主细节”视图:从任一表(主表)中选择一个项,显示来自另一个表的所有相关记录(详细信息)。
发布于 2019-07-10 13:10:39
正如其他人所评论的那样,这些表格需要第三个枢轴表来连接设施,而位置表为此非常感谢。然而,出现的下一个问题是使用这些表格并将它们连接起来,以便通过设施进行搜索。因此,SQL查询将设施分组为视图中的一列,并与location表中的所有信息一起使用。
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

此表可以使用
SELECT *
FROM locations
WHERE facility_name LIKE %Toilet% AND facility_name LIKE %Parking%这解决了我的问题,并允许数据显示在网页上,这正是我想要的。
再次感谢大家的评论和帮助!
https://stackoverflow.com/questions/56857852
复制相似问题