SQL/PHP 从关注您的人那里选择一个您不关注的关注者


SQL/PHP Select a follower that you don't follow from someone who follows you

我正在开发一个与Twitter相当的网站。您可以关注他人并发布消息。

我想选择一个我不关注的人,然后由我关注的人关注。希望你得到这句话!

这是我目前使用的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后跟 van_id 的人员的 ID 。

van_id是跟随naar_id的 ID 。

van_idnaar_id )因此,行 (1, 3) 和 (2, 3) 表示 id 1 和 2 都遵循 id 3。

wievolgtwie是包含"谁关注谁"信息的表格。

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

$row[0]是你关注的人,我想从他们关注的人中选择一个人,但你没有。

$_SESSION[id]是您的 ID(登录者)。

因此,如果 $row[0] = 2 并且登录者的 ID 为 1 'me';我想得到id 4(因为id 1是我,我不遵循id 4)(见示例表)

有谁知道我想要实现的目标的正确查询?

提前感谢,

杰罗恩

您需要

做的是在 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;

当心可能的伪代码,但这个概念应该有效。

这是我在

Simon Aronsson回答我后发现的正确查询!所以谢谢西蒙。

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.的东西。只是一个子查询。