很可能这已经在其他地方得到了解答,如果你能链接到另一个可能是王牌的帖子,我找不到任何东西。
所以我有一个MySQL数据库(我没有设计,我不能改变太多,添加一个列是不可能的),其中列出了门票和付款等。我写了一个查询,它将按月,年和每月的付款总额对行进行分组。还有另一列票证参考可以有多个引用,它们需要是varchar,每个引用都用DB中的双引号括起来(我觉得这有点不安全,不是我的决定,我不能真正改变它),每个引用用逗号分隔(如果有多个)。
你可能已经解决了我想要做的事情,我想得到按日期分组的所有参考文献。事实上,我甚至不需要知道实际参考数字是什么,我只想计算每月逐项列出的参考数量(即门票数量)。可以假设始终存在至少一个参考。在前端我要么计算逗号并添加一个,要么用逗号进行爆炸并计算一个对于满满一行的手来说工作正常的数组(一行中很少有4个以上的票),但这会形成一个报告我希望整个数据库的效率更高一些。
我没有任何代码可以发布(我不是在寻找有人为我写的,只是指出我正确的方向,也许有一种我忘记的方法?),因为我是不确定从哪里开始,所有其他类似的帖子都是关于分组和总数(我也需要这样做,但我对这部分没问题),但没有关于如何用字符串做的事情。 SUM(),但带有字符串。
提前致谢
编辑:
我被问到了桌面结构,目前我无法进入数据库但是想给你一个想法......
ID(索引), timestamp(在db中创建 - 每天截断表并导入新的csv), 打开(日期,将与时间戳不同,这是我要分组的列), 关闭(另一个日期,在这种情况下无关紧要), 总计(十进制,这个问题不相关,但我也按月累计), 门票(我要算的那个,两张门票看起来像“foo1234”,“baa5678”,门票中没有图案(即相同的前缀))
还有其他类似客户名称,但在这种情况下它们无关紧要
它与任何其他表无关,因为它的唯一功能是接收csv并在页面上显示信息(带有再次导出的选项),表格不能从前端修改。我正在做的就是建立一份总结报告。
就像我说的那样,我不期待任何人的代码或分步指南,只是一些建议或相关的SO帖子。这似乎是一件非常直接的事情
答案 0 :(得分:1)
使用CONCAT_WS
可以轻松解决此问题,详细了解here
CONCAT_WS
会将字符串与您选择的分隔符连接起来,在您的情况下,您可以使用逗号进行连接:CONCAT_WS(',',string_column)
这将为您提供逗号分隔的所有字符串。如果你真的需要计数而不是继续这个:How to count items in comma separated list MySQL
使用它会得到:
LENGTH(CONCAT_WS(',',string_column)) - LENGTH(REPLACE(CONCAT_WS(',',string_column), ',', ''))+1
+1,因为您需要的结果多于逗号的