查询表取决于id匹配的逗号分隔字段

时间:2012-06-01 22:44:21

标签: mysql

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

示例行

id    section   userAccess
1     editNews  1,13,15

那么我该如何查询并说出像

这样的内容
SELECT `section` WHERE '$userID' is in `userAccess`

我尝试了LIKE%,但显然如果我喜欢%1%,那将会返回所有3个用户。

3 个答案:

答案 0 :(得分:2)

SELECT `section` WHERE FIND_IN_SET('$userID', `userAccess`) != 0

答案 1 :(得分:0)

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

或者失败,只需

id section  userAccess
1  editNews 1
2  editNews 13
3  editNews 15

答案 2 :(得分:0)

另一种选择:

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

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