2015-05-31 155 views
1

我有一個具有以下結構的表格。問題是我必須在「功能」列中存儲多個值。我知道這種做法應該避免,但我正在尋找這種情況下的解決方案。MySQL從同一個單元格中選擇不同的值

ID Chapters Functions 
1 Chapter 1 Function 1 
       Function 2 
       Function 2 

2 Chapter 2 Test 1 
       Test 2 
       Function 2 

我正在尋找一個MySQL查詢,將輸出以下

Function 1 
Function 2 
Test 1 
Test 2 

我曾嘗試以下查詢,但因爲它把內容並不當然工作每個細胞作爲一個整體。

SELECT DISTINCT Functions from Chapters 

我也試圖在通過PHP的array_unique功能解決這個問題,但它也不能工作。

+0

ypu如何存儲函數列?它是否逗號分隔在同一列?例如1章1 Function1,Function2? –

+0

@Alex這些值是如何在列中分開的......它是由空間還是其他任何字符組成的? – Sachu

+0

值通過textarea輸入到數據庫,所以當用戶輸入函數時,按下「Enter」鍵切換行並在新行上輸入下一個函數。當從PhpMyAdmin查看時,函數會出現在DB內的新行中。沒有存儲特殊字符。 – Alex

回答

1

由於值由新線分隔,你可以使用\n轉義序列與SUBSTRING_INDEX功能以及與內部連接就可以實現同樣的

檢查例如

CREATE TABLE func (
    id INT, 
    functions VARCHAR(200)); 

INSERT INTO func VALUES 
(1, 'Function 1 
    Function 2 
    Function 2'), 
(2, 'Test 1 
    Test 2 
    Function 2'); 

查詢

SELECT DISTINCT 

    SUBSTRING_INDEX(SUBSTRING_INDEX(func.functions, '\n', numbers.n), '\n', -1) as result 
FROM 
    (SELECT 1 n UNION ALL SELECT 2 
    UNION ALL SELECT 3 UNION ALL SELECT 4) numbers INNER JOIN func 
    ON CHAR_LENGTH(func.functions) 
    -CHAR_LENGTH(REPLACE(func.functions, '\n', ''))>=numbers.n-1 
ORDER BY 
    functions 
下方

結果

result 
Function 1 
Function 2 
Test 1 
Test 2 
+0

@亞歷克斯很高興它幫助.. – Sachu

相關問題