我在使用MySQL JOIN时遇到了麻烦,并且想知道是否有人可以帮助我。真实快速浏览我加入的表格。
User
表格列(在这种情况下只是重要的列):
userId | active | role | username | addressId
Address
表格列(在这种情况下只是重要的列):
addressId | firstName | lastName
ManagerRepRelationship
表
repId | managerId
以下是这些表之间的关系:
创建新用户时,会为他们分配一个密钥(userId),并且他们的地址信息会在地址中使用密钥(addressId)获取它自己的行。该addressId键获取User表中用户行的存储。
此外,创建用户时,他们会被分配两个角色中的一个:' manager'或者'代表'。如果他们是代表,他们必须被分配一个经理(显然,在任何代表之前需要创建一些经理)。将代表分配给经理并创建后,代表userID
会存储在ManagerRepRelationship
列中的repId
,同时经理会同时存储userId
为此代表选择的managerId
存储在userId
列下的同一行中。
这是我遇到的麻烦。在编辑代表时,我想回显一下在顶部分配给该代表的经理的名字。在修改页面上,我将在网址中传递已修改的代表$_GET["userID']
,以便<?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);
?>
可以使用。
我似乎无法编写正确的JOIN语句来获取经理的名字和姓氏,而不是正在编辑的代表。这是我到目前为止,但我得到了空。我希望我能够很好地解释这一点。
HashMap
答案 0 :(得分:3)
这个条件:
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注入的影响,因此非常不安全。