Выборка в ситуации, когда несколько Id в строке varchar

Leonid

PHP? нет, не слышал...
Выборка в ситуации, когда несколько Id в строке varchar

У меня в таблице, в одном из полей перечислены через запятую несколько id из другой таблицы. В моем случае в таблице товаров перечислены id опций, которые есть у товара

id title options(varchar)
1 "товар1" "1,5,25"
2 "товар2" "2,5,10,14"

при поиске по таблице задаются несколько id опций, и надо выбрать товары, у которых есть все эти опции. Например, если заданы опции 2 и 5, то должен быть выбран товар2.

Вот. Как такой запрос организовать? Или может как-нибудь по другому таблицу организовать?
 

Андрейка

Senior pomidor developer
Или может как-нибудь по другому таблицу организовать?
id товара | id опции
?
 

Leonid

PHP? нет, не слышал...
Андрейка
не понял. Отдельное поле под каждую опцию? Но они динамические...
 

Leonid

PHP? нет, не слышал...
Наприер, у товара может быть во первых несколько групп опций, в каждой группе свои опции.
Например
группа Colors - набор цветов корпуса
Группа Options - набор доп. опций
может еще несколько групп.
Кроме групп еще обычные цифровые или строковые параметры.
Это все динамическое, на каждую группу опций (набор Id) или параметр приходится 1 поле в таблице с описанием товара.
И т.к. это все уже динамическое, то выделить по целому полю под каждую опцию нереально. Можно конечно, но как-то это слишком сложно получится...
 

Leonid

PHP? нет, не слышал...
а если групп опций будет несколько, как искать сразу по 5 таблицам?

-~{}~ 19.06.07 22:43:

вот появилось не очень красивое решение...
в полях с опциями опции разделять не только запятыми, но еще и выделить начало и коннец каким -либо символм, например a

1 "товар1" "a1a,a5a,a25a"
2 "товар2" "a2a,a5a,a10a,a14a"

в этом случае rlike не спутает 4 с 14 или 41

и искать where options rlike a2a and options rlike a5a
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
.

-~{}~ 19.06.07 21:46:

в полях с опциями опции разделять не только запятыми, но еще и выделить начало и коннец каким -либо символм, например a
Чтоб мускул вообще лёг и не поднимался...
 

kruglov

Новичок
Таблица tovary:
id title
таблица tovary_options:
tovar_id option_id

Выбрать все товары, у кого опции 4 или 18:

В 2 запроса:
select tovar_id from tovary_options where option_id in (4,18)
select ... from tovary where id in (полученные в предыдущем запросе)

В 1 запрос
select tovary.* from tovary_options left join tovary on id=tovar_id where option_id in (4,18)
 

Leonid

PHP? нет, не слышал...
Mr_Max
Ну, разве поиск по нескольким таблицам не тормознее?
 

Фанат

oncle terrible
Команда форума
Лёня. Послушай сюда.
У тебя есть только два пути.
или сделать так, как говорят тебе специалисты
или забыть дорогу на этот форум.

Обсуждать это мое пояснение тоже настоятельно не рекомендую.
Но вступать в очередные дискуссии со стотысячным новичком, который знает, как лучше - уже надоело
 

Leonid

PHP? нет, не слышал...
kruglov
Согласен, наверное так и сделаю, только в 1 запрос не очень удобно, т.к. может быть, повторюсь, несколько групп опций.
 

Lextasy

Новичок
Одна таблица - товары, Вторая таблица - типы опций, Третья таблица - сопоставление id товара и id опции, то есть:
1. goods (id | а дальше всякая лабуда name description)
2. options (id | option_title)
3. good_option (id | good_id | option_id)
 

kruglov

Новичок
Leonid
Лехко

select tovary.* from
tovary_options1 as o1
left join tovary_options2 as o2 on o1.tovar_id=o2.tovar_id
left join tovary_options3 as o3 on o1.tovar_id=o3.tovar_id
left join tovary on o1.tovar_id=tovaкy.id
where o1.option_id in (4,18) and o2.option_id=3 and o3.option_id !=10
 
Сверху