0

我想查看所有关注我或其他用户的用户。

我已经使用了 3 张桌子

用户

  • ID
  • 用户名

用户关注

  • ID
  • 用户身份
  • follow_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)您想要 col 中的行数据(转置){ first LOJ} 2)您有 2 个表,其中数据可能存在也可能不存在 {next 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 回答