你可以用
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