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
我有一个具有以下结构的 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