H
H
Hazrat Hajikerimov2015-05-02 23:36:47
SQL
Hazrat Hajikerimov, 2015-05-02 23:36:47

Is it correct to write SQL query?

There are three tables: product, filter and attr.
I join all these tables using the JOIN operator as follows:

// использую 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']);

As a result, this code does not give out exactly what you need, maybe go the other way, look for filters and then collect products by key, since each filter has a key for a specific product owned.
UPD: I solved the problem using JOIN filter as filter_1, filter_2, filter_2 ... I don't know yet how bad this implementation is, but it works.

Answer the question

In order to leave comments, you need to log in

1 answer(s)
M
Melkij, 2015-05-03
@melkij

Output the generated SQL query, find the error in it, rewrite the code so that the query you need is generated.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question