2016-04-22 200 views
2

我遇到了MySQL JOIN问题,想知道是否有人可以帮我解决问题。真正快速浏览我加入的表格。SQL遇到问题JOIN

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

userId | active | role | username | addressId 

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

addressId | firstName | lastName 

ManagerRepRelationship

repId | managerId

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

  • 当创建一个新的用户,他们会被分配一个密钥(用户id)和他们的地址信息得到它在地址自己的行用钥匙(addressId)。该addressId键获取用户表中的用户行的存储。

  • 另外,当创建用户时,他们被分配两个角色之一:'经理'或'代表'。如果他们是一名代表,他们必须被分配一名经理(显然,在任何代表可以之前需要创建一些经理)。当代表分配给经理并创建时,代表userID存储在ManagerRepRelationshiprepId列中,同时为该代表选择的经理userId存储在managerId列下的同一行中。

这是我遇到的麻烦。在编辑代表时,我想回显顶部分配给该代表的经理的姓名。在编辑页面上,我将编辑后的代表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); 
?> 
+0

抱歉。 1秒。我需要编辑这个。 –

+0

这是一个整数 –

+0

检查查询上的错误http://php.net/manual/en/mysqli.error.php和可能的错误报告http://php.net/manual/en/function.error-reporting .php –

回答

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

+1

我正在清理我的变量。只是觉得把这个代码放在这个问题上是过分的。感谢您的输入! –

+0

这是正确的答案,完美地工作!投票并回答你的问题先生!谢谢! –