Как сделать выборку?

Всем добрый вечер. Я задался целью написать доску объявлений с различными сортировками в каждой категории. Вот тестовое представление базы данных: ссылка

В качестве примера я добавил квартиру, у которой есть характеристики: количество этажей и количество комнат. (12 и 4 соответственно), и ещё одну квартиру, у которой те же характеристики за исключением количества этажей: их 9.

Делаю запрос
SELECT `items`.`name` AS item_name, `categories`.`name` AS cat_name, `attributes`.`name` AS attribute_name, `values`.`value` AS attribute_value
FROM `items`
LEFT JOIN `categories` ON `categories`.`id` = `items`.`category_id`
LEFT JOIN `item_attribute` ON `item_attribute`.`item_id` = `items`.`id`
LEFT JOIN `attributes` ON `attributes`.`id` = `item_attribute`.`attribute_id`
LEFT JOIN `values` ON `values`.`id` = `item_attribute`.`value_id`
WHERE `items`.`id` = 1


Всё отлично выводит, показывает, что есть характеристики две. Но! Проблема возникает с запросом, включающий в себя условие проверки: > 10. Другими словами, нужно выбрать итемы, у которых количество этажей будет больше 10. Я знаю как сделать это в 2 запроса. Можно ли как-то сделать в один, и, конечно же, верна ли моя структура базы данных? Заранее благодарю.
  • Вопрос задан
  • 2464 просмотра
Решения вопроса 1
Вот этот запрос выведет все итемы, у которых этажей больше 10:
SELECT i.name
FROM `items` i
    JOIN `item_attribute` ia ON ia.item_id = i.id AND ia.attribute_id = :aid
    JOIN `values` v ON v.attribute_id = ia.attribute_id
WHERE v.value > 10

:aid - это ID атрибута "Кол-во этажей".
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы