【问题标题】:MySQL Query Complex Relationship of One Way LinkingMySQL查询单向链接的复杂关系
【发布时间】:2011-02-06 15:43:27
【问题描述】:

我一直在思考这个问题。基本上我在表格中有一个网站列表。这些网站中的每一个都有几个帖子。每个帖子都可以链接到至少一个其他网站。我记录了哪些链接在哪里。我需要生成一个查询,为我提供某个帖子可以链接到的所有网站的列表。但是,这有一些规则:

  • 每个帖子可以链接到多个网站
  • 每个帖子只能链接到没有帖子链接的网站
  • 每个帖子都可以多次链接到同一个网站(因此,如果它在过去被链接过,那很好)
  • 网站可以链接到自己的帖子

下面是我的网站的代表,每个网站都有一些帖子。 http://img140.imageshack.us/img140/815/emptyd.jpg

现在,如果我添加 A 的所有可能链接:
http://img834.imageshack.us/img834/4931/alinks.jpg

但是现在,没有其他站点能够链接回 A,因为 A 正在链接到它们(规则 2)。请参阅下面的 C 可以链接到的内容:
http://img39.imageshack.us/img39/273/clinks.jpg

所以,现在 A 或 C 链接到的任何内容都无法链接回它,这降低了其他每个站点的选项。重要的是要记住,并非每个网站都会链接到所有可能的组合,我只需要从查询中返回这些组合。如果您在下面查看我添加了来自 G 和 D 的链接,这些并不是它们产生的所有可能的链接,只是一些可能的链接: D and G linking http://img689.imageshack.us/img689/7140/dglinks.jpg

现在已经开始成型了。您会注意到现在很多网站都链接到 H,因此 H 的链接选项非常有限。事实上,它只能链接到 F、B、E 和它自己(规则 4)。

我不是在这里偷懒,只是要求您为我写一个查询。我花了很长时间试图解决这个问题,但不知道从哪里开始。

这里是一些示例数据和表结构的链接:http://pastie.org/1506715

通过使用交叉连接,我已经能够产生接近所有结果的结果:

SELECT t1.* , t2.* 
FROM test_posts t1, test_posts as t2
WHERE
t1.post_id != t2.post_id
ORDER BY
t1.post_id, t2.post_id;

我觉得它很接近,但我只是不在那里。我想我需要在子查询中使用 NOT EXISTS 子句,但我不确定我到底需要什么。

【问题讨论】:

    标签: mysql database relationship


    【解决方案1】:

    我在这上面花了大约一个小时,我可以告诉你一件事,这很困难。我尝试了许多不同的方法来获得答案,但我想出的方法似乎不太有效,但却是唯一的方法。

    您正在寻找差异,这意味着我会选择尚未设置组合的所有可能组合。说起来很奇怪,但这就是正在发生的事情。

    SELECT post.post_id, website.website_id
    FROM test_posts post
      JOIN test_posts website ON website.website_id NOT IN
    (
      SELECT sl.website_id
      FROM test_posts f
        INNER JOIN test_smartlink_to_websites sl ON f.post_id = sl.post_id
      WHERE f.post_id = post.post_id
    )
    ORDER BY post_id
    

    【讨论】:

    • 我确实根据您提供的数据对其进行了测试,并确保它得到了正确的结果。
    • 似乎适用于测试数据和我的实时数据。我会实施它,看看它是如何进行的。说真的,非常感谢您花时间看它——有点奇怪,因为感觉它应该很容易,但实际上并非如此。
    • 是的,我以为它会进行一些简单的连接,但玩过之后我意识到我不能。我不是 SQL 的专业人士,但因为你需要一个 NOT IN,所以这就是我想出的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-30
    • 2016-08-14
    • 1970-01-01
    • 1970-01-01
    • 2012-11-29
    • 2016-04-05
    相关资源
    最近更新 更多