2015-05-31 5 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 

Я также попытался решить эту проблему с помощью array_unique функции PHP, но это не сработало.

+0

Как ypu хранит столбцы функций? Разделяется ли она в одной колонке? например, 1 глава1 Функция1, Функция2? –

+0

@Alex, как значения разделены в столбце .. это пробелами или любым другим символом? – Sachu

+0

Значения вводятся в базу данных через текстовое поле, поэтому, когда пользователь вводит функцию, нажимает клавишу «Ввод», чтобы переключить линию и ввести следующую функцию в новой строке. Функции отображаются на новых строках внутри БД при просмотре из PhpMyAdmin. Никакие специальные символы не хранятся. – 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

@Alex рад, что это помогло .. – Sachu

Смежные вопросы