提问人:waepd urmia 提问时间:11/1/2023 更新时间:11/5/2023 访问量:76
如何在MySQL中通过分隔符( ; )检索存储的数据
How to retrieve stored data by delimiter ( ; ) in MySQL
问:
我有 2 张这样的表:
region Table:
+----------+-------------+
|region_id | region_name |
+----------+-------------+
|1 | RN1 |
|2 | RN2 |
|3 | RN3 |
+----------+-------------+
和
role Table:
+----------+-------------+
|role_id | role_name |
+----------+-------------+
|1 | admin |
|2 | software |
|3 | network |
+----------+-------------+
在我的 HTML 表单中,我从管理员那里获得region_id和role_id,并使用 PHP 存储在 MySQL 表中,如下所示:
useraccess Table:
+--------+-----------+
|role_id | region_id |
+--------+-----------+
|1 | 1;2;3 |
|2 | 1 |
|3 | 1;2 |
+--------+-----------+
好吧,问题是我不知道如何编写一个可以使用 useraccess table 从区域表中检索region_name的查询。 例如:当 role_id = 1 时,region_id为 1;2;3 所以我想在我的 HTML 页面中显示 RN1,RN2,RN3,而不是 1,2,3。
我尝试使用PHP使用for循环,但它有自己的局限性并且无法正常工作。我还使用了MySQL SPLIT_STR()函数,但也许我无法获得结果。我将不胜感激帮助我解决这个问题。
答:
1赞
Hammad Ahmed khan
11/1/2023
#1
您可以使用以下查询:
SELECT ua.role_id,
GROUP_CONCAT(r.region_name SEPARATOR ',') AS region_names
FROM useraccess ua
JOIN region r ON FIND_IN_SET(r.region_id, replace(ua.region_id,";",","))
GROUP BY ua.role_id;
评论
0赞
waepd urmia
11/1/2023
逗号或分号,这不是问题。我只想显示 RN1,RN2,RN3 而不是 1,2,3(分隔符不重要,或者;
0赞
Hammad Ahmed khan
11/1/2023
@waepdurmia这将显示 RN1,RN2,RN3
0赞
waepd urmia
11/1/2023
#2
此说明效果更好:
SELECT a.role_id,
GROUP_CONCAT(b.region_name ORDER BY b.region_id) RegionAccessName
FROM useraccess a
INNER JOIN region b
ON FIND_IN_SET(b.region_id, a.region_id) > 0
GROUP BY a.role_id
但不是返回:
RN1,RN2,RN3
RN1
RN1,RN
返回:
RN1,RN2,RN3
RN1,RN2,RN3
RN1,RN2,RN3
在PHP代码中,我使用这个:
while($row2 = mysqli_fetch_array($result2)){;
echo $row2["RegionAccessName"];
}
-1赞
Reza Sedagheh
11/5/2023
#3
对于此问题,您需要在两个表之间有一个公共列。
评论
SUBSTRING_INDEX(SUBSTRING_INDEX(CSV_value, 'delimiter', N), 'delimiter', -1)
region