MySQL从同一个单元格中选择不同的值

时间:2015-05-31 06:40:25

标签: mysql distinct

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

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

1 个答案:

答案 0 :(得分: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