我正在开发一个可与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]
是您的身份证明(登录的人)。
因此,如果$row[0]
= 2且登录的人身份为1'我';我想获得id 4(因为id 1是我而我不遵循id 4)(参见示例表)
有人知道我想要实现的正确查询吗?
提前致谢,
的Jeroen
答案 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.
。只是一个子查询。