SQL / PHP选择一个跟随你的跟随者

时间:2013-10-16 17:15:35

标签: php sql twitter

我正在开发一个可与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是包含'whofollowswho'信息的表格。

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

$row[0]是您关注的人,我希望从中选择某人,但不是。

$_SESSION[id]是您的身份证明(登录的人)。

因此,如果$row[0] = 2且登录的人身份为1'我';我想获得id 4(因为id 1是我而我不遵循id 4)(参见示例表)

有人知道我想要实现的正确查询吗?

提前致谢,

的Jeroen

2 个答案:

答案 0 :(得分: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;

获得可能的伪代码,但这个概念应该有用。

答案 1 :(得分:1)

这是我在Simon Aronsson回答我后发现的正确查询!谢谢Simon。

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