Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.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结果中筛选等效但不重复的行_Mysql_Self Join - Fatal编程技术网

从MySQL结果中筛选等效但不重复的行

从MySQL结果中筛选等效但不重复的行,mysql,self-join,Mysql,Self Join,为了促进兄弟会之间的联系,我正在尝试设计一个系统,人们可以对彼此的了解程度进行评分,然后将最不了解彼此的人进行匹配。这是评级表的外观: from_bro | to_bro | rating -------------------------- A | B | 5 B | A | 5 B | C | 2 C | B | 3 A | C | 5 C | A

为了促进兄弟会之间的联系,我正在尝试设计一个系统,人们可以对彼此的了解程度进行评分,然后将最不了解彼此的人进行匹配。这是评级表的外观:

from_bro | to_bro | rating -------------------------- A | B | 5 B | A | 5 B | C | 2 C | B | 3 A | C | 5 C | A | 5 我想设计一个查询,选择每对的平均评分。到目前为止,我有:

SELECT *, (m1.rating + m2.rating)/2 AS average FROM matches AS m1 LEFT JOIN matches AS m2 ON m1.from_bro = m2.to_bro AND m1.to_bro = m2.from_bro 这在很大程度上是可行的,但它包含冗余数据:

from_bro | to_bro | rating | from_bro | to_bro | rating | average ----------------------------------------------------------------- A | B | 5 | B | A | 5 | 5.0000 B | A | 5 | A | B | 5 | 5.0000 B | C | 2 | C | B | 3 | 2.5000 C | B | 3 | B | C | 2 | 2.5000 A | C | 5 | C | A | 5 | 5.0000 C | A | 5 | A | C | 5 | 5.0000
查看第1行和第2行、第3行和第4行以及第5行和第6行,尽管它们不是重复的,但本质上是相同的。有什么方法可以过滤掉那些多余的行吗?

如果to\u bro和from\u bro实际上是bro\u id的数字,您可以添加:

AND m1.from_bro_id > m2.from_bro_id 
所以每对兄弟只有一张唱片

如果它们是字符串,则可以使用:

AND STRCMP(m1.from_bro, m2.from_bro) = 1 

这是一个字符串比较,表示m1.from_bro>m2.from_bro

如果to_bro和from_bro实际为bro id数字,则可以添加:

AND m1.from_bro_id > m2.from_bro_id 
所以每对兄弟只有一张唱片

如果它们是字符串,则可以使用:

AND STRCMP(m1.from_bro, m2.from_bro) = 1 

这是一个字符串比较,意思是m1.from_bro>m2.from_bro

如果to_bro和from_bro是数字,你可以加上和m1.from_bro_id>m2.from_bro_id,所以每对兄弟只有一条记录。哦,我想如果它们是字符串,你可以使用和strcmpmm1.from_bro,m2.from_bro=1,这是一个字符串比较,意思是m1.from_bro>m2.from_bro.聪明,而且工作完美。如果你想把它作为一个答案而不是评论,我会接受的。如果to_bro和from_bro实际上是bro_id的数字,你可以加上和m1.from_bro_id>m2.from_bro_id,这样你每对bro只能得到一条记录。哦,我想如果它们是字符串,你可以使用,strcmpmm1.from_bro,m2.from_bro=1,这是一个字符串比较,意思是m1.from_bro>m2.from_bro.聪明,而且工作完美。如果你想把它作为回答而不是评论,我会接受的。