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 

私の質問は: ライターの完全なリストを取得し、このライターを (user1 として) フォローしていない場合に値 = 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 が表示され、フォローしていないライターのユーザー ID が表示されます。次に、それに基づいてフォロー/フォロー解除ロジックを作成します。

于 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 に答える