你可以用
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(),让您找到一个逗号分隔字符串的项目又名find_in_set(25, '11,23,25,26)
将返回真实的,并且匹配的行会被退回......你用分隔符~~
它不会工作与FIND_IN_SET分离的设施...所以我用REPLACE()将~~
更改为逗号,然后在JOIN条件中使用它。你可以以多种方式从这里出发..例如让我们说你想要设施ID的概述..你只需添加在选择GROUP_CONCAT(f.id)
,你有所有的ID ...注意如果你这样做,你需要添加GROUP BY在查询结束时告诉它你想如何分组结果
你认为JOIN的结果是什么? –
我基本上想要显示列表中的第二个表中的值,当我尝试编辑窗体时,我应该能够区分选定的值(从第二个表中取出)和未选择的值(取出的值从第一张桌子)。 –
在这两个表中都没有关系,你需要添加一个关联列 – devpro