Хм, возможно, вы просто пропустили 2 логических шага, чтобы это произошло.
Вам нужна таблица AttributeTypes и таблица AttributeValues.
objects
id (integer)
name (string)
attribute_types
id (integer)
name (string)
description (string)
enabled (bit)
attribute_values
id (integer)
attribute_type_id (integer)
value (string)
enabled (bit)
attributes
id (integer)
object_id (integer)
attribute_type_id (integer)
attribute_value_id (integer)
Таким образом, объект может иметь атрибуты, эти атрибуты указываются посредством attribute_type_id и attribute_value_id.
Это позволяет вам иметь объект с несколькими атрибутами.
1010 * например *
object
-> 1, ball
attribute_types
-> 10, Colour, null, enabled
-> 20, Shape, null, enabled
-> 30, Material, null, enabled
attribute_values
-> 100, 10, blue, enabled
-> 200, 10, red, enabled
-> 300, 10, green, enabled
-> 400, 20, round, enabled
-> 500, 20, square, enabled
-> 600, 20, triangle, enabled
Таким образом, атрибут будет выглядеть так:
attributes
-> 1000, 1, 10, 100 // this item has a color and it is blue
-> 1001, 1, 20, 400 // this item has a shape and it is round
-> 1002, 1, 10, 200 // this item has a color and it is red
Так что теперь объекты могут иметь несколько атрибутов, которые указывают их значения в разных таблицах. Теперь важный вопрос, как вы запрашиваете это? Возможно, вам придется разделить запрос на несколько частей в зависимости от того, насколько сильный ваш sql.
@attribute_type_id = select Id from attribute_types where name = 'Color' // 10
select * from objects
inner join attributes on objects.id = attributes.object_id
inner join attribute_values on objects.attribute_value_id = attribute_values.id
where attribute_type_id = @attribute_type_id
and attribute_values.value= 'blue'
И вот, у вас это есть, вы должны вернуть каждый объект, у которого есть attribute_type цвета и attribute_value синего цвета.
Мой Sql не так силен, но вы должны иметь возможность выполнить более одного предложения, если вы хотите искать несколько атрибутов одновременно. По моему мнению, attribute_type_id в таблице атрибутов не объединен с таблицей attribute_type, но это может облегчить выполнение запроса за 1 попадание, с точки зрения производительности, хотя он у меня будет, поэтому он ускорит запросы, не присоединяясь к таблица, но разница может быть незначительной в зависимости от того, насколько большой все становится.
Примечание: я обычно работаю с msssql, а не с mysql, поэтому, если типы баз данных не совпадают, вот почему.