Правильно составить SQL запрос?

Есть три таблицы: product, filter и attr.
Все эти таблицы соединяю с помощью оператора JOIN следующим образом:

// использую sql класс прослойку  https://github.com/Hazard2/PHP-MySQLi-Database-Class

$this->sql->join("attr", "product.id = attr.connect", "LEFT");
$this->sql->join("filter", "product.id = filter.connect", "LEFT");

// поиск продуктов с опр. параметрами в таблице filter
$this->sql->where('filter.filter', '3');   // тут  id типа фильтра, в данном случае объем памяти
$this->sql->where('filter.value', '64Gb'); // соответственно значение

// и вот тут косяк, дело в том что таких условий к выше указанным столбцам несколько, 
// можно было бы использовать оператор IN (64Gb, 32Gb ...) 
// но в этом случае оператор ищет одно из значений в столбце, 
// как же сделать так что бы можно было к одному столбцу несколько жестких значений, 
// жестких значит они должны быть найдены.

$this->sql->where('attr.name', 'type');
$this->sql->where('attr.value', $this->interface->title);
$this->sql->where('product.visibility', 0);

$result = $this->sql->get('product', null, ['product.id', 'product.name', 'product.price']);


В итоге этот код выдает не совсем то что нужно, быть может идти другим путем, искать фильтры а потом собирать товары по ключу, так как у каждого фильтра есть ключ конкретного принадлежащему товару.

UPD: Решил проблему с помощью JOIN filter as filter_1, filter_2, filter_2 ... пока не знаю на сколько это плохая реализация, зато работает.
  • Вопрос задан
  • 459 просмотров
Пригласить эксперта
Ответы на вопрос 1
Melkij
@Melkij
PostgreSQL DBA
Выведите сгенерированный SQL-запрос, найдите в нём ошибку, перепишите код так, чтобы генерировался нужный вам запрос.
Ответ написан
Ваш ответ на вопрос

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

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