列mysql中逗号分隔值的计数

时间:2015-06-02 10:35:25

标签: mysql

SELECT ifnull(LENGTH(GROUP_CONCAT(varchar SEPARATOR ',')) - LENGTH(REPLACE(GROUP_CONCAT(varchar SEPARATOR ','), ',', '')) + 1,0) AS total    
FROM tablename    
WHERE date(date and time)=curdate()

varchar此列包含以逗号分隔的值,我在列中精确计算逗号分隔值但不适用于大数据。

是否有任何解决方案可以计算没有长度问题

1 个答案:

答案 0 :(得分:1)

您可能达到group_concat_max_len的限制 - 这意味着超过(默认情况下)1024个字符的任何内容都会被截断,因此您无法获得所有结果。

可能的解决办法是计算每行的项目数和总计行数。

SELECT SUM(ifnull(LENGTH(varchar) - LENGTH(REPLACE(varchar, ',', '')) + 1,0)) AS total    
FROM tablename    
WHERE date(date and time)=curdate()

这样你根本不需要考虑这个限制。

只是提高group_concat_max_len并不是一个真正可行的解决方案,因为你只会在以后点击它。

真正的解决方案是摆脱逗号分隔的列表并引入另一个表,其中每个项目将是单独的行。这样,大多数计数和类似操作都更简单。