2

私はTwitterに匹敵するウェブサイトに取り組んでいます。人をフォローしたり、メッセージを投稿したりできます。

私がフォローしていない人のうち、私がフォローしている人がフォローしている人を 1 人選びたいです。あなたがその文を得たことを願っています!

これは私が現在使用している SQL クエリですが、正しく動作しません。すでにフォローしている人はまだ表示されます。

SELECT a.naar_id
FROM wievolgtwie a, wievolgtwie b
WHERE a.van_id = $row[0]
    AND b.van_id = $_SESSION[id]
    AND a.naar_id != $_SESSION[id]
    AND a.naar_id != b.naar_id
LIMIT 0, 1;

説明:

naar_idが続く人物のID van_id

van_idはフォローしているIDですnaar_id

( van_id, naar_id) 行 (1, 3) と (2, 3) は、id 1 と 2 の両方が id 3 に続くことを意味します。

wievolgtwie「whofollowswho」情報を含むテーブルです。

van_id, naar_id
+------+------+
| 1    | 2    |
| 1    | 3    |
| 2    | 1    |
| 2    | 4    |
| 3    | 4    |
| 3    | 2    |
+------+------+

$row[0]あなたがフォローしている相手を選択したいのですが、あなたがフォローしていない人です。

$_SESSION[id]あなたのID(ログインしている人)です。

したがって、if $row[0]= 2 で、ログインしているユーザーの ID は 1 'me' です。ID 4 を取得したい (ID 1 は私であり、ID 4 をフォローしていないため) (例の表を参照)

私が達成したいことの正しいクエリを知っている人はいますか?

前もって感謝します、

ジェローン

4

2 に答える 2

1

これは、サイモン・アロンソンが私に答えた後に私が見つけた正しい質問です! それでは、サイモンに感謝します。

SELECT naar_id
FROM wievolgtwie
WHERE van_id = $row[0]
    AND naar_id != $_SESSION[id]
    AND naar_id NOT IN (
            SELECT naar_id
            FROM wievolgtwie
            WHERE van_id = $_SESSION[id])
LIMIT 0, 1;

それは必要a.ありませんでしb.た。ただのサブクエリ。

于 2013-10-17T07:17:50.007 に答える
1

あなたがする必要があるのは、あなたのwhere句にサブクエリを入れて、あなたのIDとnaar_idを持つ行がデータベースにないことを確認し、それによってフィルタリングすることです. 次のようになります。

SELECT a.naar_id
FROM wievolgtwie a, wievolgtwie b
WHERE a.van_id = $row[0]
    AND b.van_id = $_SESSION[id]
    AND a.naar_id != $_SESSION[id]
    AND a.naar_id != b.naar_id
    AND b.vaan_id NOT IN (SELECT vaan_id
                            FROM wievolgtwie
                           WHERE naar_id = a.naarId)
LIMIT 0, 1;

疑似コードの可能性に注意してください。ただし、概念は機能するはずです。

于 2013-10-17T06:25:40.850 に答える