3

ユーザー テーブルの user_id を表す follower フィールドと followee フィールドを持つ follow テーブルがあります。user テーブルには、full_name と呼ばれるユーザーの名前があります。フォロワーが投稿したときに、投稿テーブルからすべてのフォロワーに更新をプッシュするクエリを作成したいと考えています。結果は次のようになります。

フォロワーのuser.full_name、フォロワーのuser.fullname、フォロワーの更新。

私が持っているコードは次のとおりです。

SELECT user.user_id, user.user_id, post.update
FROM follow
    JOIN  post ON post.user_id = follow.follower_user_id
    JOIN  user ON user.user_id = follow.followee_user_id
Where update.date  > DATE_SUB(CURDATE(),INTERVAL 0 DAY)
GROUP BY follow.followee_user_id

正しいクエリを実行しますが、フォロワー名を入力できません。フォロワーを複製するだけです。選択フィールドの書き方について何か考えはありますか?

4

2 に答える 2

1

テーブルには2 つの結合が必要です。1 つはフォロワー用、もう 1 つはフォロワー用です。user

SELECT followee_user.full_name AS followee_name, 
    follower_user.full_name AS follower_name, 
    post.update
FROM follow
INNER JOIN user AS followee_user 
    ON follow.followee_user_id = followee_user.user_id
INNER JOIN user AS follower_user 
    ON follow.follower_user_id = follower_user.user_id
INNER JOIN post ON follow.followee_user_id = post.user_id
WHERE post.update > DATE_SUB(CURDATE(), INTERVAL 0 DAY)

2 つを明確にするために、結合されたテーブルの各インスタンスにエイリアスを指定する必要があることに注意してください。userこの場合、「followee_user」と「follower_user」を使用しました。

私はupdate.dateそれがタイプミスであり、あなたが意味したものであると仮定したので、それが何であるかわからないupdate; 必要に応じて変更してください。また、GROUP BYここでは意味がないので、削除しました。

于 2013-09-10T03:29:20.157 に答える
0

ユーザー テーブルに2回参加する必要があります。1回はフォロワー ロール用、もう 1 回はフォロワー ロール用です。

 SELECT e.full_name AS followee_full_name
      , r.full_name AS follower_full_name
      , p.update
   FROM follow f
   JOIN post p ON p.user_id = f.follower_user_id
   JOIN user r ON r.user_id = f.follower_user_id
   JOIN user e ON e.user_id = f.followee_user_id
  WHERE p.update_date  > CURDATE() + INTERVAL 0 DAY
于 2013-09-10T03:31:34.650 に答える