@khodos_dmitry

Как сделать SQL-запрос выбора по значениям метаданных?

Есть таблица: save_id, meta_key, meta_value
Нужно выбрать save_id, где `meta_key` = 'width_surface' AND `meta_value` = '2.6' и `meta_key` = 'height_surface' AND `meta_value` = '3.53' и больше никаких мета полей нет. Я придумал такое:
SELECT `save_id` FROM (SELECT `save_id` FROM `cpl_save_meta` WHERE `meta_key` = 'width_surface' AND `meta_value` = '2.6' AND `save_id` IN (SELECT `save_id` FROM `cpl_save_meta` WHERE `meta_key` = 'height_surface' AND `meta_value` = '3.53')) t1 WHERE (SELECT COUNT(*) FROM `cpl_save_meta` WHERE `save_id` = t1.`save_id`) = 2

Что-нибудь лучше есть? Может с вордпресса запросы кто знает.
  • Вопрос задан
  • 111 просмотров
Пригласить эксперта
Ответы на вопрос 1
@alexalexes
Если save_id - внешний ключ (некий идентификатор конфига), то полноту наличия всех параметров (и width_surface, и height_surface), а также отсутствие других параметров можно трактовать так:
Select t1.save_id, t1.meta_key, t1.meta_value, t2.meta_key as t2_meta_key, t2.meta_value as t2_meta_value
from cpl_save_meta t1
join cpl_save_meta t2 on t1.save_id = t2.save_id
                and t1.meta_key = 'width_surface'  and t1.meta_value = '2.6'
                and t2.meta_key = 'height_surface' and t2.meta_value = '3.53'
where (select count(*) from cpl_save_meta t3
        where t3.save_id = t1.save_id
          and t3.meta_key not in ('width_surface', 'height_surface')) = 0
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы