如何在MySQL中通过MySQL(;)检索存储的数据

zqry0prt  于 2023-11-16  发布在  Mysql
关注(0)|答案(3)|浏览(101)

我有两张这样的table:

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表单中,我从Administrator获取region_id和role_id,并使用PHP存储在MySQL表中,如下所示:

useraccess Table:
+--------+-----------+
|role_id | region_id |
+--------+-----------+
|1       | 1;2;3     |
|2       | 1         |
|3       | 1;2       |
+--------+-----------+


那么,问题是我不知道如何写一个查询,可以检索region_name(s)从region表使用useraccess table.例如:当role_id = 1然后region_id是1;2;3所以不是1,2,3我想显示RN 1,RN 2,RN 3在我的HTML页面.
我尝试使用PHP的for循环,但它有自己的限制,并不正确工作。我也使用MySQL SPLIT_STR()函数,但也许我不能得到的结果。我会很感激帮助我解决这个问题。

u4vypkhs

u4vypkhs1#

你可以使用这个查询:

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;

字符串

h6my8fg2

h6my8fg22#

这个指令更好:

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"];
}

nc1teljy

nc1teljy3#

对于这个问题,你需要在两个表之间有一个公共列

相关问题