我在使用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注入的影响,因此非常不安全。