2016-01-21 27 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