MySQL Select 来自同一单元格的不同值

MySQL Select distinct values from same cell

我有一个具有以下结构的 table。问题是我必须在 "Functions" 列中存储多个值。我知道应该避免这种做法,但我正在寻找针对这种情况的解决方案。

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函数解决这个问题,但也没用。

由于值由新行分隔,您可以使用 \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