gpt4 book ai didi

MySQL查询单向链接的复杂关系

转载 作者:可可西里 更新时间:2023-11-01 08:55:43 25 4
gpt4 key购买 nike

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

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

下面是我的网站的代表,每个网站都有一些帖子。 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 子句,但我不确定我到底需要什么。

最佳答案

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

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

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

关于MySQL查询单向链接的复杂关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4914272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com