从MySQL结果中筛选等效但不重复的行
为了促进兄弟会之间的联系,我正在尝试设计一个系统,人们可以对彼此的了解程度进行评分,然后将最不了解彼此的人进行匹配。这是评级表的外观: 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从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
查看第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.聪明,而且工作完美。如果你想把它作为回答而不是评论,我会接受的。