0

こんにちは、2 つのテーブルがPAS_UserありPAS_Follow、下の図を参照してください。

関連する MySQL テーブル

私が苦労しているのは、MySQL のクエリです。ユーザーは、関係 ID が相互に関係している他のユーザーのリストしか表示できません。

相互 (Mutual) の場合、PAS_Followテーブルにレコードを記録する必要があるため、id を持つユーザーがいて、テーブル1の id を持つユーザーには、2行 1 を含む 2 行のデータが含まれるとします。

flow_follower_user_id = 1 && flow_followed_user_id = 2

行2は

flow_follower_user_id = 2 && flow_followed_user_id = 1

このクエリがありますが、ソース ユーザーをフォローしていないユーザーが表示されているようです。

SELECT DISTINCT PAS_Follow.folw_followed_user_id AS user_user_id, PAS_User.user_first_name, PAS_User.user_last_name, PAS_User.user_avatar_url, PAS_User.user_sector, PAS_User.user_job_type, PAS_User.user_pass_token FROM PAS_User RIGHT OUTER JOIN PAS_Follow ON PAS_User.user_user_id = PAS_Follow.folw_followed_user_id WHERE `folw_followed_user_id` =**:id** OR `folw_follower_user_id` =**:id** AND `folw_deleted` = 0 ORDER BY PAS_Follow.folw_followed_user_id ASC

この例**:id**では = 1 です。

これはダイレクト メッセージ プラットフォーム用であるため、ユーザーがユーザーのリストを開始するときに、相互関係を持つユーザーのみが表示されることが重要です。

問題の説明が十分に完了していることを願っています。

**** 以下からの回答 ****

これが他の誰かに役立つことを願っています

SELECT foll_second.folw_follower_user_id AS user_user_id, user.user_first_name, user.user_last_name, user.user_avatar_url, user.user_job_type FROM PAS_Follow foll_first, PAS_Follow foll_second, PAS_User user WHERE foll_first.folw_follower_user_id = foll_second.folw_followed_user_id AND foll_second.folw_follower_user_id = foll_first.folw_followed_user_id AND foll_first.folw_follower_user_id =:id AND foll_second.folw_follower_user_id = USER .user_user_id
4

1 に答える 1

1

ユーザーのテーブルに ID がありません。あなたがそれを持っていて、それを と呼びましょうid、あなたはこれを使うことができます:

SELECT * 

    foll_second.folw_follower_user_id AS user_user_id, 
    user.user_first_name, 
    user.user_last_name, 
    user.user_avatar_url, 
    user.user_job_type 

FROM 

    PAS_Follow foll_first,
    PAS_Follow foll_second,
    PAS_User user

WHERE 

   foll_first.folw_follower_user = foll_second.folw_followed_user 
   AND foll_second.folw_follower_user = foll_first.folw_followed_user
   AND foll_first.folw_follower_user = **:id**
   AND foll_second.folw_follower_user = user.id;

これにより、2 つのリンク関係の組み合わせのリストと、それらの関係によって接続されているユーザーが表示され**:id**ます。

これは、2 つのフォロー関係とユーザーのすべての可能な組み合わせから、必要なものに対応するものを選択します。つまり、次のことを意味します。

  • 2 つの関係は相互に接続する必要があります。
  • それは実際には相反するはずです
  • 「開始」ユーザーは、探しているユーザーである必要があります
  • 結果にもあるユーザー行は、2 番目のリレーションが指している行である必要があります。
于 2013-06-26T18:34:35.563 に答える