查询中的if语句?

时间:2012-08-15 05:17:41

标签: php mysql sql

我的数据库中有3个表:

用户:

id  ------- username
1            user1  
2            user2

作家

id  ------- name
4           writer4
5           writer5 
8           writer8

以下:

user_id  -----  follow  
1               5
1               8
2               5

所以,现在User1跟在writer5和writer8之后,user2跟在writer5

之后

我以user1身份登录我的应用程序,当我进入编写者页面时,我获得了数据库中所有编写者的列表。 我只想在每个作家面前展示我是否跟随这位作家。

列表作家页面示例:

writer4     :follow
writer5     :unfollow (i'm following him now)
writer8     :unfollow (i'm following him now)
writer100     :follow 

我的问题是:如果我不是(作为user1)跟随此作者,是否有查询来获取完整的编写者列表并给我一个值= 0

任何想法? 谢谢..

4 个答案:

答案 0 :(得分:7)

SELECT
 writers.username,
 IFNULL(following.user_id,0) AS isFollowing
FROM
 writers
 LEFT JOIN following ON writers.id = following.follow

然后在php中你可以查看$results['isFollowing']是真(> = 1)还是假(0)并显示你需要的内容。

答案 1 :(得分:3)

我建议您在用户ID的密钥上对作者进行外部联接:

select w.*, f.user_id from writers w
left outer join following f on f.follow = w.id 
and f.user_id = <INSERT USER ID HERE>

这应返回所有作者的列表,并显示您关注的作者的用户ID,对于您没有的作者则为null。然后,您可以将跟随/取消关注逻辑基于此。

答案 2 :(得分:3)

您需要使用CROSS JOIN才能让用户获得所有作家。

SELECT b.name,if(c.userid is null, 'follow', 'unfollow') result
FROM users a
        CROSS JOIN writers b
        LEFT JOIN following c
          on a.id = c.userid AND
             b.id = c.follows
WHERE a.id = 1

SQLFiddle Demo

答案 3 :(得分:0)

PL / SQL支持编程语言功能,如条件语句,迭代语句。

编程结构类似于您在Java和C ++等编程语言中的使用方式。在本节中,我将为您提供如何在PL / SQL编程中使用条件语句的语法。

IF condition 

THEN 

 statement 1; 

ELSE 

 statement 2; 

END IF;

for further reference check this link