从多个表中选择列,其中每个表中的列等于变量

时间:2016-02-16 14:38:07

标签: php mysql

我有两张桌子:

| item_id  | item_added_by_user_id     | item_name  |
| -------- | ------------------------- | ---------- |
| 1        | 23                        | item 1     |
| 2        | 23                        | item 2     |
| 3        | 24                        | item 3     |

extra_access

| 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'];

我的逻辑'如果返回任何行,则用户必须具有访问权限,但这不起作用。

我该怎么做才能检查登录用户是否有权访问?

4 个答案:

答案 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;