【发布时间】: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