我有这个表列结构:
id - n1 - n2 - n3
这里有一些虚拟数据:
id - n1 - n2 - n3
1 - 3 - 2 - 1
2 - 6 - 5 - 7
3 - 2 - 3 - 1
4 - 1 - 6 - 5
5 - 5 - 6 - 7
6 - 3 - 5 - 6
其思想是按顺序选择和计算n1、n2和n3的每一组。
例如,我们可以得到这个结果:
total - n1s - n2s - n3s
2 - 1 - 2 - 3
2 - 5 - 6 - 7
1 - 1 - 5 - 6
1 - 3 - 5 - 6
你能帮我设定一个状态来实现这个目标吗??
我试图尝试在没有多重选择和php数组排序的情况下。。。
谢谢。
3条答案
按热度按时间7kqas0il1#
请考虑以下内容-一个标准化的数据集。。。
这里有一个快速的解决方法。提供更快/更优雅的解决方案。。。
r1zk6ea12#
我们只需要表达式来“排序”列n1、n2和n3中的值。如果我们有,那么我们可以做一个简单的
GROUP BY
以及COUNT
.会回来的
xtfmy6hx3#
作为第一种方法(如果时间允许的话),您应该真正考虑规范化您的表,正如@strawberry的答案所建议的那样
然而,第二种方法允许任意数量的列(尽管由于字符串操作和气泡排序而效率低下),利用用户定义的函数是可能的。
我们基本上需要创建一个函数,它可以对逗号分隔字符串中的值进行排序。我找到了一个工作函数,可以进行排序。从这里复制代码:
您需要在mysql服务器上运行此代码,以便此函数在查询中可用,就像本地内置mysql函数一样。现在,查询部分变得简单了。你要做的就是
Concat_ws()
所有数字列使用逗号。然后再申请sortString()
函数。最后,在中使用“ordered”字符串Group By
子句,以获得所需的结果。尝试:
现在我建议您可以使用应用程序代码来更改逗号分隔
n_sequence
返回表格列显示。