我正在开发一个与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
是包含"谁关注谁"信息的表格。
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.
的东西。只是一个子查询。