Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Mysql连接查询多个值_Php_Mysql - Fatal编程技术网

Php Mysql连接查询多个值

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 如果我想连接这两个表,查询是什么样

我有一张桌子叫facility。 结构如下:

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中查看过的信息。:)