2015-03-18 3 views
0

Моя таблица ПользовательКак соответствовать разделенных запятыми значений в MySQL и получить значения

+----+-----------+---------+--------+---------+------+-------+ 
| id | name  | email | number | call_no | chek | Extra | 
+----+-----------+-------+----------+---------+------+-------+ 
| 1 | one  | [email protected] | 123 | 1164 | 1 | 1,2 | 
+----+-----------+---------+---------+---------+------+------+ 
| 2 | two  | [email protected] | 123 | 1164 | 1 | 2,1 | 
+----+-----------+---------+---------+---------+------+------+ 

Я поле называется Extra оно содержит значение 1,2

что мой вопрос?

Мне нужно, чтобы соответствовать 1,2 в таблице идентификатору и myresult как one,two из таблицы пользователя

Для простого примера query.what им пытались в ниже?

select name from user Extra in('1,2'); 

Мой ожидаемый выход

one,two

Если я пытался сделать в взорваться, и если я запустить его в цикле я могу получить результат, но мне нужно это в sql возможно получить его?

+1

Сохранение значений в CSV очень плохой дизайн базы данных. – Jens

+1

Изменить дизайн db - это вариант? – Masiorama

ответ

0

У вас должна быть отдельная таблица с одной строкой на id и каждое значение extra. Это называется соединительной таблицей. SQL имеет отличную структуру данных для хранения списков вещей, называемых Таблица не строка. И, тем не менее, сохранение чисел как символов еще хуже.

Вы можете, однако, делать то, что вы хотите с агрегацией join и:

select id, group_concat(e.name) as names 
from table t left join 
    table e 
    on find_in_set(t.id, e.extra) > 0 
group by t.id; 
+0

его работает как шарм, прежде чем я его принимаю. Мне нужно еще одно разъяснение. 'Names' содержит дубликаты vallues, как я могу удалить дублирующее значение? –

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