我有两张桌子:
| item_id | item_added_by_user_id | item_name |
| -------- | ------------------------- | ---------- |
| 1 | 23 | item 1 |
| 2 | 23 | item 2 |
| 3 | 24 | item 3 |
| item_id | extra_user_id |
| -------- | --------------- |
| 1 | 25 |
| 2 | 26 |
| 3 | 28 |
我想检查当前登录用户是否有权编辑此项目。有权访问的用户是item_added_by_user_id
下的用户和extra_user_id
下具有相同item_id
的用户。
我读了JOIN
s并想出了这个:
$sql = "SELECT items.item_added_by_user_id, ea.extra_user_id FROM items
INNER JOIN extra_access AS ea
ON items.item_id = ea.item_id AND
items.item_added_by_user_id=" . $SESSION['user_id'];
我的逻辑'如果返回任何行,则用户必须具有访问权限,但这不起作用。
我该怎么做才能检查登录用户是否有权访问?
答案 0 :(得分:1)
试试这个:
$sql = "SELECT items.item_added_by_user_id, ea.extra_user_id FROM items
INNER JOIN extra_access AS ea
ON items.item_id = ea.item_id
WHERE
items.item_added_by_user_id=" . $SESSION['user_id']
. " OR ea.extra_user_id=" . $SESSION['user_id'];
答案 1 :(得分:1)
根据您的说明,我认为union all
查询是合适的:
select i.item_id
from items i
where item_added_by_user_id = $SESSION_USER
union all
select ea.item_id
from extra_access ea
where extra_user_id = $SESSION_USER;
答案 2 :(得分:1)
我的答案与@Fuujin完全相同,但我只添加了$idItem
,因为在你的问题中你提到了#34; 我想检查当前登录的用户是否有权编辑这个项目" :
$sql = "SELECT distinct items.items_id
FROM items
LEFT JOIN extra_access AS ea ON items.item_id = ea.item_id
WHERE items.items_id = ".$idItem."
AND (items.item_added_by_user_id = ".$_SESSION['user_id']." OR ea.extra_user_id = ".$_SESSION['user_id'].")";
此外,我使用LEFT加入,而不是INNER,如果项目在extra_access
中没有条目,则可能会出现问题。
如果至少有1个结果,则用户拥有权利。
答案 3 :(得分:1)
SELECT COUNT(*)
FROM items
WHERE item_added_by_user_id=$SESSION['user_id']
OR item_id IN(
SELECT item_id
FROM extra_access
WHERE extra_user_id=$SESSION['user_id']
)
AND item_id=$idItem;