У меня интересная ситуация, когда записи таблицы сложно связаны друг с другом с помощью комбинации столбцов в другой таблице.
У меня есть entity
таблица
entity_id | owner_id | title | entity_type |
--------------------------------------------
1 | 3 | some title 1 | supertype
2 | 2 | some title 2 | supertype
3 | 2 | some title 3 | supertype
4 | 5 | title 1 | type_1
5 | 5 | title 2 | type_2
6 | 5 | title 3 | type_3
Тогда у меня есть другая таблицакоторый хранит различные свойства в стиле ключ-значение
Таблица entity_properties
:
property_id | entity_id | property_key | property_value
112 | 1 | identifier | type_1
124 | 2 | identifier | type_2
146 | 3 | identifier | type_3
634 | 1 | is_cool | 0
135 | 2 | is_cool | 1
23 | 3 | is_cool | 1
Теперь я хочу выбрать сущности с entity_type, имеющие значения type_1
, type_2
, type_3
, а также имеет столбец property_value
из entity_properties
, в котором будет отображаться is_cool
параметр объекта, который имеет property_key
= identifier
со свойством property_value, которое соответствует типу объекта моих искомых элементов из entity
таблица.
желаемые результаты:
entity_id | owner_id | title | entity_type | property_value
----------------------------------------------------------------
4 | 5 | title 1 | type_1 | 0
5 | 5 | title 2 | type_2 | 1
6 | 5 | title 3 | type_3 | 1
Я несколько дней бью головой об эту, и это лучшее приближение, которое не работает ...
SELECT
sought.*,
entity_properties.property_value
FROM
entity AS sought
INNER JOIN
entity AS entity_type
JOIN
entity_properties AS properties
ON
properties.entity_id = entity_type.entity_id
WHERE
sought.owner_id = 5 AND sought.entity_type IN(
'type_1',
'type_2',
'type_3')
AND properties.property_key = 'is_cool'