2016-04-22 12 views
2

MySQL JOINに問題があり、誰かが私を助けてくれるのだろうかと思っていました。私が参加しているテーブルの実際の概要。SQLに問題があります。JOIN

User表の列(この場合は問題だけの列):

userId | active | role | username | addressId 

Address表の列(この場合は問題だけの列):

addressId | firstName | lastName 

ManagerRepRelationshipテーブル

repId | managerId

ここ

は、これらのテーブル間の関係です:新しいユーザーが作成されると

  • 、彼らはキー(のuserId)を割り当てられますし、そのアドレス情報は、キー(あるAddressId)と住所にそれ自身の行を取得します。そのaddressIdキーは、User行にユーザーテーブルを持つストアを取得します。

  • また、ユーザーが作成されると、「マネージャー」または「代理人」という2つの役割のいずれかが割り当てられます。彼らが代理人である場合は、マネージャに割り当てなければなりません(担当者がなる前にマネージャを作成する必要があることは明らかです)。担当者がマネージャに割り当てられて作成されると、userIDrepId列のManagerRepRelationshipに格納され、同時にこの担当者のuserIdmanagerId列の同じ行に格納されます。

これは私が抱えている問題です。代表者の編集については、その担当者に割り当てられているマネージャーの名前を上部に表示したいと思います。編集ページでは、編集した代理人のuserIdをURLに渡していますので、$_GET["userID']で利用できます。

編集中の担当者ではなく、マネージャの姓名を取得するために正しいJOIN文を書いているようです。ここまでは私がこれまで持っていたものですが、私はnullになっています。私はこれを十分に説明してくれることを望みます。

<?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

申し訳ありません。ちょっと待って。私はこれを編集する必要があります。 –

+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 

のみtrueになります。また、あなたのコードは、SQLインジェクションの影響を受けやすいため、非常に安全ではないことに言及しなければならない

"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 

:私は何をあなたが探しては、このようなものだと思います。

+1

私は変数をサニタイズしています。この質問にそのコードを入れるのは大変だと思っただけです。入力いただきありがとうございます! –

+0

これは正解であり、完璧に機能します!あなたのためにアップ投票と答えられた質問!ありがとうございました! –

関連する問題