首页 > 解决方案 > 测试相互双边一对一连接

问题描述

所以,我正在琢磨一个有趣的想法,我想出了一些令人头疼的问题。我想象的场景有点像快速约会后的得分。如果双方都回答是,他们会收到通知,否则什么都不会。这与约会无关,但这是我能想到的最好的比喻。还有第二对相似,但我将尝试解释我首先考虑的数据结构。

这种情况将是一个表,我们称之为objects,另一个表,为了论证,我们将称之为quiz,第三个表具有三个字段,形成一个复合键objects-id-fromobjects-id-aboutquiz-id我想我们称之为answersquiz有一个字段quizquiz-id它允许将一行与第二行配对(每行都有另一行的 id) - 或者称为第四个表pairs(两个字段作为复合键)。

然后,我想搜索并查找给定的objects-id所有情况,其中要么对于给定的 quiz-id(相互)都有关于另一个的条目,要么对于给定的 quiz-id 有一个条目,而另一个有一个倒数另一个(配对)测验ID(配对)的条目。

在现实世界中,相互就像是快速约会的结果,但配对更像是青少年问他们的朋友“你会给谁回礼”,然后“你会从谁那里得到回礼?” 同样,这不是我们正在做的事情,但这样解释要简单得多。

我想在一个(或最多两个 - 每个一个)MySQL语句中识别相互和配对的结果。如果必须的话,我会使用 PHP,但我想炫耀一下并一键获得结果。问题是我不知道该怎么做。

我什至想知道我是否可以INNER JOINobjects、通过answers、到quiz和返回quizobjects. 感觉很乱,但可能会奏效。我想我可以将它quiz与一个键连接配对quiz并有一个额外的INNER JOIN,但我想知道是否没有更简单的东西我错过了?

例如,有没有我可以使用的更简单的实体关系模式。有没有更简单的算法来获得配对和相互?

示例数据:

objects: 
id
1,
2,
3,
4

quiz:
id/pair
1/null,
2/3,
3/2,
4/null,

answers:
from/about/quiz
1/2/1,
2/1/1,
3/1/1,
4/2/1,
2/4/1,
1/2/2,
2/1/3,

因此objects1&2 和 2&4 有一个互为quiz1

objects1&2 也通过2 &3配对quiz(您可能会说是单向连接)

标签: mysql

解决方案


推荐阅读