2016-04-22 121 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

這是正確的答案,完美地工作!投票並回答你的問題先生!謝謝! –