Php Mysql连接查询多个值
我有一张桌子叫facility。 结构如下:Php Mysql连接查询多个值,php,mysql,Php,Mysql,我有一张桌子叫facility。 结构如下: id | name --------- 1 | Hotel 2 | Hospital 3 | medical shop 我还有一个表,它从上面的表中获取数据,并在一列中保留多个值。视图如下所示: id | facilities --------------- 1 | Hospital~~medical shop~~Hotel 2 | Hospital~~Hotel 3 | medical shop~~Hotel 如果我想连接这两个表,查询是什么样
id | name
---------
1 | Hotel
2 | Hospital
3 | medical shop
我还有一个表,它从上面的表中获取数据,并在一列中保留多个值。视图如下所示:
id | facilities
---------------
1 | Hospital~~medical shop~~Hotel
2 | Hospital~~Hotel
3 | medical shop~~Hotel
如果我想连接这两个表,查询是什么样子的
我试过这个,但没用:
select overview.facilities as facility
from overview join facility on facility.id=overview.facilities;
你可以通过一些黑客来做到这一点
select o.facilities as facility
from overview o
join facility f on find_in_set(f.facilities, replace(o.facilities, '~~', ','));
我强烈建议您更改存储数据的方式。目前它被认为是不正常的,很快就变成了一个需要处理的怪物
您应该更改表结构,使其看起来更像这样
+----------+--------------+
| facility |
+----------+--------------+
| id | name |
+----------+--------------+
| 1 | Hotel |
| 2 | Hospital |
| 3 | medical shop |
+----------+--------------+
+-----------+-------------+
| overview |
+-----------+-------------+
| id | facility_id |
+-----------+-------------+
| 1 | 2 |
| 2 | 3 |
| 3 | 1 |
| 4 | 2 |
| 5 | 1 |
| 6 | 3 |
| 7 | 1 |
+-----------+-------------+
代码说明:
基本上,您希望在概览中找到匹配的设施。MySQL的一个便捷功能是,它允许您在逗号分隔的字符串中查找项目,也就是
find_in_set(25,'11,23,25,26)
将返回true,并且将返回匹配的行。。。您正在使用分隔符~
分隔设施,该分隔符不适用于“在集合中查找”。。。因此,我将~
更改为逗号,然后在连接条件中使用它。你可以用多种方式从这里出发。。例如,让我们假设您想要概览的设施id。。您只需添加选择组\u CONCAT(f.id)
,您就拥有了所有的id。。。注意:如果您这样做,您需要在查询结束时添加一个GROUP BY,告诉它您希望结果如何分组您希望联接的结果是什么?我基本上希望在列表的第二个表中显示值,当我尝试编辑表单时,我应该能够区分所选的值(从第二个表中获取)和未选择的(从第一个表中获取)。两个表中都没有关系。你需要添加一个列来建立关系。显然,这两个表之间没有任何链接。我建议你花点时间学习外键和外键。感谢你提供了这个伟大的来源。我得到了许多我从未在mysql中查看过的信息。:)