今天因为需求需要又改了接口,其中涉及到数据的三表关联和sql if语句,起先不太了解不过经过一段时间探索终于是搞懂了。于是写下一点心得。
SELECT a.user_id,a.nickname,b.phone,b.sex,b.avatar_url,IF(c.id,1,0) FROM group_user a INNER JOIN app_user b ON a.user_id=b.user_id LEFT JOIN friend c ON c.`into_id`=a.user_id AND c.`from_id`=:user_id WHERE group_id=:group_id";
三张表用于查找群组下的用户字段,然后判断是否是当前用户的好友。
LEFT JOIN:
左表数据有几条则输出几条数据,和又表无关。
SELECT a.user_id,a.nickname,b.phone,b.sex,b.avatar_url,IF(c.id,1,0) FROM group_user a
INNER JOIN friend c ON c.`into_id`=a.user_id AND c.`from_id`=1
LEFT JOIN app_user b ON a.user_id=b.user_id WHERE group_id=123456

SELECT a.user_id,a.nickname,b.phone,b.sex,b.avatar_url,IF(c.id,1,0) FROM group_user a INNER JOIN app_user b ON a.user_id=b.user_id
LEFT JOIN friend c ON c.`into_id`=a.user_id AND c.`from_id`=1 WHERE group_id=123456

然后是if()函数,其实他判断的是一个表中的一个字段,如上c.id,其实判断的是关联查询的这张表中这个字段是否为空,在此将id字段显示出来
SELECT a.user_id,a.nickname,b.phone,b.sex,b.avatar_url,c.id,IF(c.id,1,0) FROM group_user a INNER JOIN app_user b ON a.user_id=b.user_id
LEFT JOIN friend c ON c.`into_id`=a.user_id AND c.`from_id`=1 WHERE group_id=123456

如图id字段不为空值则返回1空值返回0.
总结完毕
网友评论