Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MySQL/PHP中查找和存储数据库关系_Php_Mysql - Fatal编程技术网

在MySQL/PHP中查找和存储数据库关系

在MySQL/PHP中查找和存储数据库关系,php,mysql,Php,Mysql,场景:多对多关系 表有两列:UserID和UserChoiche 我在每一行中逐个存储用户首选项。 (这是最有效的方式吗?) 例如: UserID UserChoiche markanna markpaul markjohn 约翰马克 在本例中,mark选择了3个用户,john选择了1个用户 John和Mark已经选择了对方,我需要php来找到这个db关系 //php mysql查询,选择指定用户的所有选项(在本例中为标记) 从UserID标记的示例表中选择UserChoich

场景:多对多关系

表有两列:UserID和UserChoiche

我在每一行中逐个存储用户首选项。 (这是最有效的方式吗?)

例如:

UserID         UserChoiche
mark
anna

mark
paul

mark
john

约翰
马克

在本例中,mark选择了3个用户,john选择了1个用户

John和Mark已经选择了对方,我需要php来找到这个db关系

//php mysql查询,选择指定用户的所有选项(在本例中为标记)
从UserID标记的示例表中选择UserChoiche

//查找匹配项
??
这是我的问题:我正在寻找最简单和最有效的方法来处理这个问题

也许是这样?(它可以工作,但我无法编写mysql语句,对我来说太复杂了!)
如果上一个查询的Userchoice(在本例中它将返回anna paul和john)等于表中的任何Userid(在本例中为john),并且该Userid有一个Userchoice,其值为上一个查询的Userid(在本例中为第4行)

则我们有一个匹配项

//如果找到匹配项,则将UserID和UserChoiche存储到变量中,我将使用这些变量发出一些通知(可能有许多匹配项,所以可能使用数组?)


这应该会让两个选择了对方的人一笑置之。我们基本上是将表连接到表本身,以查找相互关系

下面是返回符合
标记
的用户的查询。给定上述数据,它将返回
john

SELECT p2.UserID
FROM preferences p1
JOIN preferences p2
ON p2.UserID = p1.UserChoice
AND p1.UserChoice = p2.UserID
WHERE p1.UserID = 'mark'

听起来你在寻找一个自我加入。看看这个问题:我喜欢它,它似乎工作(测试仍在进行中),但你能澄清什么是p1和p2吗?好的,现在我弄明白了一切,它工作得非常完美!谢谢<代码>p1和
p2
是。另一种编写查询的方法是将preferences中的
作为p1
,这使得它更明显地是一个别名。别名允许我使用两个不同的缩写名称引用同一个表。警告:我已将答案更改为mattedgod。您的答案似乎有效,但当我在更复杂的环境中测试-->时,它给出了错误的结果。也许如果你看看mattedgod的答案,你就会明白为什么你的答案不完全有效,老实说,我不知道为什么!无论如何谢谢。@MarkBelli,你说得对。我的查询中有一个错误。我添加了一个缺少的标准(请参见和部分)。这与mattedgod的答案基本相同,只是我使用的是ANSI标准连接。
SELECT p2.UserID
FROM preferences p1
JOIN preferences p2
ON p2.UserID = p1.UserChoice
AND p1.UserChoice = p2.UserID
WHERE p1.UserID = 'mark'