0

私または別のユーザーをフォローしているすべてのユーザーを表示したい。

私は3つのテーブルを使いました

ユーザー

  • ID
  • ユーザー名

ユーザーフォロー

  • ID
  • ユーザーID
  • follow_id
  • 日にち

画像

  • ID
  • ユーザーID
  • 画像

最後にアップロードされた画像でユーザー名を取得しようとしました。また、自分とフォロワーのステータスを取得して、既にフォローしているかどうかを確認する必要があります。

私のクエリは Mysql に書かれています:

SELECT 
          u.id AS user_id,
          u.username,
          i.image,
          t.id AS STATUS 
FROM
          users AS u 
          INNER JOIN (user_follow AS f) 
                    ON (u.id = f.user_id) 
          LEFT OUTER JOIN images i 
                    ON i.id = 
                    (SELECT 
                              b.id 
                    FROM
                              images AS b 
                    WHERE f.user_id = b.user_id 
                    ORDER BY b.id DESC 
                    LIMIT 1) 
          LEFT OUTER JOIN user_follow t 
                    ON t.id = 
                    (SELECT 
                              m.id 
                    FROM
                              user_follow m 
                    WHERE user_id = 3 
                              AND follow_id = u.id) 
WHERE f.follow_id = 7 
          AND f.user_id NOT IN (7, 3) 
GROUP BY f.user_id 

私のユーザーID - 3; ID - 7 のユーザーをフォローしているユーザーを見ています

出力は次のとおりです。

Array
(
    [0] => Array
        (
            [user_id] => 6
            [username] => 6666
            [image] => flw3utn9igiqh7dtt2o61ydf8_174.jpeg
            [status] => 226
        )

)

私のクエリは高すぎると思います。ステータスを簡単に確認して 1 または 0 を出力する方法がわかりません。「フォローする」場合はフォローラインIDを取得し、そうでない場合は空にします。また、クエリを最適化する方法を教えていただければ幸いです。

4

1 に答える 1

1

UVP - ページを表示しているユーザー。FBV - プロフィール\フォロワーのリストが表示されているユーザー。以下のクエリの最後の列は、UVP が FBV に従っていない場合は0を返し、それ以外の場合は1を返します。クエリを最適化するのは難しいでしょう 1) 行データを列 (転置) { 最初の LOJ} に入れたい 2) データがあるかもしれないし、ないかもしれない 2 つのテーブルがあります {次の 2 LOJ}

      select *,(case when (uf3.id is not null) then 'follow' else null end) aa 
  from users u  
    left outer join 
                (Select * from 
                 user_follow 
                 where user_id = <FVP>
                 and follow_id =<UVP>) uf3 on uf3.user_id = u.id  
    left outer join 
            (select * from images where user_id = <FBV> ORDER BY id DESC 
                LIMIT 1) i
     on i.user_id = u.id 
    left outer join 
                (Select * 
                 from user_follow 
                 where user_id =<FVP>  
                 and follow_id !=<UVP>)  uf  on uf.user_id = u.id  
    where u.id =<FBV>;
于 2012-05-24T13:06:52.967 に答える