【问题标题】:SQL/PHP Select a follower that you don't follow from someone who follows youSQL/PHP 从关注你的人中选择一个你不关注的关注者
【发布时间】:2013-10-17 16:49:39
【问题描述】:

我正在开发一个类似于 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)(见示例表)

有人知道我想要达到的目标的正确查询吗?

提前致谢,

杰伦

【问题讨论】:

  • 您从 SELECT a.naar_id 开始,您将其定义为“您关注的人的 ID”。这不能保证总是返回你已经关注的人的 id 吗?还是我只是不明白你的表?
  • 是的,抱歉,应该是 'van_id 后面的人的 id'
  • 我添加了一个示例表。我希望现在更清楚一点。

标签: php sql twitter


【解决方案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;

注意可能的伪代码,但这个概念应该有效。

【讨论】:

  • 谢谢!我认为它会工作,但 a.和 b。显然子查询的东西是要走的路!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    • 2016-11-23
    • 1970-01-01
    • 2021-02-25
    • 1970-01-01
    • 2012-06-08
    • 2016-04-07
    相关资源
    最近更新 更多