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

Php 从多个表中选择列,其中每个表中的一列等于一个变量,php,mysql,Php,Mysql,我有两张桌子: 项目 额外通道 我想检查当前登录的用户是否有权编辑此项目。具有访问权限的用户是由\u user\u id添加的\u项下的用户和具有相同项目\u id的额外\u user\u id下的用户 我读了关于连接的文章,得出了以下结论: $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

我有两张桌子:

项目 额外通道 我想检查当前登录的用户是否有权编辑此项目。具有访问权限的用户是由\u user\u id添加的\u项下的用户和具有相同项目\u id的额外\u user\u id下的用户

我读了关于连接的文章,得出了以下结论:

$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'];
我的“逻辑”是,如果返回任何行,用户必须具有访问权限,但这不起作用

如何检查登录用户是否具有访问权限?

请尝试以下操作:

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

根据您的描述,我认为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;

我的答案与@Fuujin完全相同,但我只添加了$idItem,因为在您的问题中,您提到我想检查当前登录的用户是否有权编辑此项目:

此外,我使用的是左连接,而不是内部连接,如果项目在extra_访问中没有条目,这可能是一个问题


如果至少有一个结果,则用户拥有相应的权限。

请详细说明“不起作用”的真正含义。快速提问;为什么?很好!我没有想过这样做。我接受你的答案,因为它对我来说更简单,因为它没有连接的复杂性!:谢谢是的,它也更快:-
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;
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;
$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'].")";
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;