2

我正在开发一个类似于 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后面跟着的人的 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

您需要做的是在 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 回答
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 回答