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

別の選択肢:

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

つまり、2つの文字列の周りにセパレータを配置する場合と同じように使用できます。これは、試したソリューションに似ており、他のデータベースでも同じアプローチを使用できるためです。

于 2012-06-01T23:09:25.060 に答える
0

グループベースの権限構造に移行してから、セクションへのFKとグループIDを含むGroupAccessテーブルを作成することを検討できます。ユーザーは、UserGroupリンクテーブルのグループに割り当てられます。これにより、多くの柔軟性が提供されます(ただし、より複雑になります)。

またはそれが失敗した場合は、単に

id section  userAccess
1  editNews 1
2  editNews 13
3  editNews 15
于 2012-06-01T22:48:59.743 に答える