我正在开发一个类似于 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_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(登录者)。
因此,如果 $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;
注意可能的伪代码,但这个概念应该有效。
关于php - SQL/PHP 从关注您的人中选择您不关注的关注者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19409635/