Групировка данных по отдельным сегментам строки

yaniks

новичок
Групировка данных по отдельным сегментам строки

Привет всем!

Вопрос такого плана. Есть таблица с полем types
в этом поле через сепаратор содержутся определенные переменные, что то вроде
PHP:
id  |   types
1		a; b
2		b
3		a; c; d
4		a; d
5		i
есть ли возможность в одном запросе сгрупировать данные по этим переменным
т.е
PHP:
types  | count(id)
a		3
b		2
c		1
d		2
i		1
зарание спасибо!
 

AnToXa

prodigy-одаренный ребенок
сделай справочник для значений и многие-ко-многим и все буддет чики-пики.
 

yaniks

новичок
т.е создать временную таблицу с возможными значениями, а потом через join ?
 

AnToXa

prodigy-одаренный ребенок
зачем временную?
постоянную.

там буддет лежать что-то вроде

Код:
table link
--------
id | data
1 | a
1 | b
2 | b
3 | a
3 | c
3 | d
и т.д.

ну и primary key делаешь на два поля.

если a,b - это нечто сложное, то можно вынести эти данные в еще один справочник и вставлять в таблицу link только id записей из справочника

ну и запрос соотв делать очень просто по таблице link

select data, count(1) from link group by data; (если data - это достаточно длинные строки, то стоит вынести их в отдельную табличку как сказано выше)
 

yaniks

новичок
вообще хорошо :)

а если не прописывать в дополнительную таблицу "link" два поля и остановится на одном (id) , и сделать запрос типа:

Код:
select count(link.id) ,
link.id from link,
table1 where table1.types rlike link.id 
group by link.id
т.е вносим в таблицу только a,b - это сильно осложнит(замедлит) вывод ?
 

AnToXa

prodigy-одаренный ребенок
ну я вообще недолюбливаю like :)
плюс имхо поиск по индексу все-таки буддет быстрее нежели like, пусть таблица и больше, но это надо смотреть.

имхо с доп таблицей яснее как-то и красивее.
 
Сверху