在使用 SQL JOIN 时遇到问题


Having Trouble With SQL JOIN

我在使用MySQL JOIN时遇到问题,想知道是否有人可以帮助我。对我加入的桌子的真正快速概述。

User表列(在这种情况下只是重要的列):

userId | active | role | username | addressId

Address表列(在这种情况下只是重要的列):

addressId | firstName | lastName

ManagerRepRelationship

repId | managerId

以下是这些表之间的关系:

  • 创建新用户时,会为他们分配一个键 (userId),并且他们的地址信息在带有键 (addressId) 的地址中获取自己的行。该 addressId 键获取用户表中包含用户行的存储。

  • 此外,创建用户时,会为其分配以下两个角色之一:"经理"或"代表"。如果他们是代表,则必须为他们分配一名经理(因此很明显,需要在任何代表之前创建一些经理)。将代表分配给经理并创建时,代表的userID将存储在repId列的ManagerRepRelationship中,同时为该代表选择的经理userId存储在managerId列下的同一行中。

这就是我遇到的麻烦。在编辑代表时,我想在顶部呼应分配给该代表的经理的姓名。在编辑页面上,我正在 url 中传递编辑代表的userId,以便它可用于$_GET["userID'] .

我似乎无法编写正确的 JOIN 语句来取回经理的名字和姓氏,而不是正在编辑的代表。这是我到目前为止所拥有的,但我得到的是零。我希望我解释得足够好。

<?php
  $user_id = $_GET["userId"]; // the rep getting edited userId
  // grab all the reps address info and user info
  $user_result = mysqli_query( $connection,
                "SELECT Users.*, Address.*
                 FROM Users
                  JOIN Address
                  ON Users.addressId=Address.addressId
                 WHERE Users.userId=" . $user_id
              );
  $user_set = mysqli_fetch_array($user_result);
 // Trying to get the first and last name of the manager
 // That is assigned to this rep
   $result = mysqli_query( $connection,
                    "SELECT A.firstName, A.lastName
                     FROM Address A
                      JOIN Users U
                      ON A.addressId=U.addressId
                      JOIN ManagerRepRelationship M
                      ON M.repId=U.userId AND M.managerID=U.userId
                     WHERE U.role='manager' AND M.repId=" . $user_id
                   );
   $managerName = mysqli_fetch_array($result);
?>

此条件:

ON M.repId=U.userId AND M.managerID=U.userId

只有当一个人是他们自己的经理时,才会是正确的。 我认为您正在寻找的是这样的东西:

"SELECT
   A.firstName, A.lastName
FROM 
   Address A
   JOIN Users U ON A.addressId=U.addressId
   JOIN ManagerRepRelationship M ON M.managerID=U.userId
   WHERE U.role='manager' AND M.repId=" . $user_id

还应该提到的是,您的代码容易受到SQL注入的影响,因此非常不安全。