Придумалось два варианта решения задачи и не могу определиться какой использовать.
Суть задачи - находить записи которые содержат определенные опции.
Первый вариант, хранить все опции строкой в одном столбце :
Table - objects
id | title | options
------------------------------------------------
1 | text | option=x,option2=y,option3=z
1 | text | option=b,option2=n,option3=z
В этом случае запрос будет выглядеть так:
SELECT * FROM table
WHERE options
LIKE %option=x%
AND options LIKE %option2=y%
AND options LIKE %option3=z%
Второй вариант, перенести опции в отдельную таблицу:
Table - options
id | object_id | option_name | option_value
1 | 1 | option | x
2 | 1 | option2 | y
3 | 1 | option3 | z
Для этого варианта запрос будет выглядеть так:
SELECT * FROM `objects`
INNER JOIN options as ot1 ON ( objects.id = options.object_id )
INNER JOIN options as ot2 ON ( objects.id = ot2.object_id )
INNER JOIN options as ot3 ON ( objects.id = ot3.object_id )
WHERE 1=1 AND (
( ot1.option_name = 'option' AND ot1.option_value = 'x' )
AND ( ot2.option_name = 'option2' AND ot2.option_value = 'y' )
AND ( ot3.option_name = 'option3' AND ot3.option_value = 'z' )
)
GROUP BY objects.id;