2013-10-16 96 views
2

我正在与Twitter相媲美的网站上工作。您可以关注人员并发布消息。SQL/PHP选择一个跟随者,你不关注跟随你的人

我想选择一个我不关注的人,他跟随的是我关注的人。 希望你有这句话!

这是我当前使用的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的编号。

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]是你的id(登录的人)。

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

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

由于提前,

的Jeroen

+1

您以'SELECT a.naar_id'开始,您已将其定义为“您关注的人员的ID”。这不保证总是返回你已经关注的人的身份证吗?或者我只是不理解你的桌子? –

+0

对不起,那应该是'van_id后面的人的ID' – Jeroen

+0

我添加了一个示例表。我希望现在更清楚一点。 – Jeroen

回答

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; 

是可能的伪代码,但这个概念应该工作。

+0

谢谢!我认为它会工作,但一个。和b。显然子查询的东西是要走的路! – Jeroen

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

相关问题