SQL выборка по нескольким парам ключей и значений с цифровыми значениями

Есть таблица "postmeta" с полями "meta_id"(ПК), "post_id", "meta_key" и "meta_value". В связке "meta_key" и "meta_value" находятся следующие данные:

"meta_key"  | "meta_value"
------------+-------------
"min_price" | 1000
"max_price" | 150000
"min_days"  | 7
"max_days"  | 30
/* сюда же могут быть включены различные параметры типа: */
"pasport"   | 1
"student"   | 1

Нужно выбрать из таблицы все "post_id", где цена будет = 100000, количество дней = 14, и есть ключ "pasport" со значением "1".


Ответы (1 шт):

Автор решения: Akina
SELECT post_id
FROM postmeta
GROUP BY post_id
HAVING 100000 BETWEEN MIN(meta_value * (meta_key = 'min_price'))
                  AND MAX(meta_value * (meta_key = 'max_price'))
   AND 14 BETWEEN MIN(meta_value * (meta_key = 'min_days'))
              AND MAX(meta_value * (meta_key = 'max_days'))
   AND SUM(meta_key = 'pasport' AND meta_value = 1)
→ Ссылка