2016-01-21 33 views
-1

我有一个表格,其中一列可能包含逗号分隔值,例如查询在逗号分隔列表中发生

| Date ...........| Methods .....| 
- 
| 2014/10/01 .| A ................| 
- 
| 2014/11/01 .| C ................| 
- 
| 2014/08/01 .| A,B .............| 
- 
| 2015/09/01 .| C ................| 
- 
| 2015/11/01 .| C, A ............| 
- 

我想输出,基于年度和方法计数的总结,这样产生的结果将是

**2014: A = 2, B = 1, C = 1** and **2015: A = 1, B = 0, C = 2** 

因此,没有逗号分隔的列表,它会通过一个简单的组,但与清单这只会导致A,B被视为一个单独的条目,而不是一个A和B.这是可能的吗?

我希望这是有道理的,'表'是清楚的。

+0

可以请你告诉你为什么有逗号分隔的列表? – bugwheels94

+0

逗号分隔的列表用于数据库的其他区域,现在只用于记录信息,现在我们想报告它,因此需要执行上述类型的查询。 – rsphorler

+0

未尝试群组,因为我知道这是行不通的,我已经看到了一个解决方案,涉及创建一个临时表来拆分逗号分隔列表,但似乎为我想要的矫枉过正。在我刚刚使用数组通过PHP处理数据,然后使用数组计数之前,真的希望查看是否有其他方法通过MySQL来完成。 – rsphorler

回答

-1

尝试使用SPLIT_STR功能及以下查询:

CREATE FUNCTION SPLIT_STR(
    x VARCHAR(255), 
    delim VARCHAR(12), 
    pos INT 
) 
RETURNS VARCHAR(255) 
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos), 
     LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1), 
     delim, ''); 

查询:

SELECT DATE_FORMAT(date,'%Y'),SPLIT_STR(dats,',',1) AS m1, SPLIT_STR(dats,',',2) AS m2 
FROM tablename 
GROUP BY date, Methods 
+0

@rsphorler:检查答案,并让我知道它是否修复了您的问题 – AnkiiG

+0

谢谢这在初步测试中似乎看起来很有希望,现在只需要将其应用到真实数据中。我第一次使用一个函数,所以需要检查它是如何工作的,但是它正在我的测试服务器上工作。 – rsphorler

+0

@rsphorler :)伟大的它为你工作。继续并用真实数据对其进行测试。在mysql查询中使用函数肯定是一个很好的解决方案。也让我知道是否有任何问题。也接受答案;) – AnkiiG