1

我的数据库中有一个表格,列出了要显示的不同部分。如果用户 ID 在名为“userAccess”的数据库列中,我们只想显示这些部分,该列将有一个逗号分隔的用户列表,可以看到它。

示例行

id    section   userAccess
1     editNews  1,13,15

那么我怎样才能查询出来并说出类似的话

SELECT `section` WHERE '$userID' is in `userAccess`

我尝试了 LIKE %,但显然如果我做 LIKE %1%,这将返回所有 3 个用户。

4

3 回答 3

2
SELECT `section` WHERE FIND_IN_SET('$userID', `userAccess`) != 0
于 2012-06-01T22:50:42.500 回答
0

您可以考虑移动到基于组的权限结构,然后拥有一个 GroupAccess 表,其中包含您的部分和组 ID 的 FK。用户将被分配到 UserGroup 链接表中的组。这为您提供了很大的灵活性(但更复杂)。

或者失败了,只需拥有

id section  userAccess
1  editNews 1
2  editNews 13
3  editNews 15
于 2012-06-01T22:48:59.743 回答
0

另一种选择:

SELECT `section`
FROM t
WHERE concat(',', '$userID', ',') like concat(',', `userAccess`, ',')

换句话说,如果将分隔符放在两个字符串周围,则可以使用 like。我提供这个是因为它与您尝试的解决方案更相似,并且您可以在其他数据库中使用相同的方法。

于 2012-06-01T23:09:25.060 回答