1

私はまだソーシャルネットワーキングスクリプトに取り組んでおり、現在はほとんど完成していますが、解決できなかった問題が1つあります。それは、ユーザーによるすべての投稿とログインしているユーザーの出力です。後者は問題。

次のステートメントで、ステータス メッセージを出力することはできましたが、名前やプロフィール情報などの他の情報は結合されていません。それが起こっていないことだと思います:

そのため、ログインしているユーザーでない場合はステータスが表示されますが、ユーザーがログインしている場合 (たとえば、UserID 1、およびはい..変数を削除して数字を入力しただけです)、メッセージが表示され、ユーザー情報にはアクセスしません。

SELECT * FROM al_posts
        LEFT JOIN al_friendships ON al_posts.user_id = al_friendships.user_b 
        LEFT JOIN al_users ON al_friendships.user_b = al_users.id
        WHERE al_friendships.user_a = '{$_SESSION['UserID']}' OR al_posts.user_id = '{$_SESSION['UserID']}'

問題のテーブルのデータベース構造: (注: フレンドシップ テーブルは問題ではないので省略しました)

al_posts テーブル

al_posts テーブル

al_users テーブル

al_users テーブル

誰かが構文の間違いに気付いた場合は、訂正できるように、私が間違っていたことを説明していただければ幸いです。ありがとう

4

2 に答える 2

2

外部結合テーブルの条件を where 句に入れると、効果的に内部結合になります。これを結合条件に適用する必要があります。

SELECT * 
FROM al_posts
  LEFT JOIN al_friendships 
         ON al_posts.user_id = al_friendships.user_b 
        AND al_friendships.user_a = '{$_SESSION['UserID']}'
  LEFT JOIN al_users ON al_friendships.user_b = al_users.id
WHERE al_posts.user_id = '{$_SESSION['UserID']}'

条件がこれを内部結合にする理由は、「一致しない」行が外部結合テーブルの列に NULL 値で返されるためです。値を NULL と比較すると「未定義」が返されるため、条件は false になり、「外部結合」されたすべての行が除外されます。

于 2013-04-30T11:53:45.440 に答える