麻烦SQL JOIN

时间:2016-04-22 15:34:40

标签: php mysql

我在使用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

1 个答案:

答案 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注入的影响,因此非常不安全。