1

我的数据库上有 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 

我的问题是:如果我没有(作为用户 1)关注此作者,是否有查询来获取作者的完整列表并给我一个 value=0

有任何想法吗 ?谢谢 ..

4

4 回答 4

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

然后在 php 中,您可以检查$results['isFollowing']是 true (>=1) 还是 false (0) 并显示您需要的内容。

于 2012-08-15T05:22:07.040 回答
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。然后,您将基于您的关注/取消关注逻辑。

于 2012-08-15T05:22:25.060 回答
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 演示

于 2012-08-15T05:33:26.393 回答
0

PL/SQL 支持条件语句、迭代语句等编程语言特性。

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

IF condition 

THEN 

 statement 1; 

ELSE 

 statement 2; 

END IF;

如需进一步参考,请查看此链接

于 2012-08-15T06:23:05.487 回答