Помогите составить SELECT запрос mysql. Yii2

226
01 апреля 2018, 17:48

Здравствуйте! У меня есть таблица, в ней хранятся данные по династическим полям. Выглядит она так:

id | product_id | category_id | field_id | value_string | value_int
1  | 15         | 120         | 1        | Бренд-1      | 0
1  | 16         | 120         | 1        | Бренд-2      | 0
1  | 15         | 120         | 2        | null         | 5
1  | 16         | 120         | 2        | null         | 15
1  | 17         | 120         | 1        | Бренд-1      | 0
1  | 17         | 120         | 2        | null         | 55

field_id с id 1 - поле бренда, с id 2 - размер

Мне нужно получить product_id у которых поле бренд (field_id - 1) равен "Бренд-1" и "Бренд-2" и поле размер (field_id - 2) с диапазоном к примеру от 5 до 40

Из данных выше, результатом должен быть product_id с 15 и 16. product_id с 17 не подходит по диапазону, хоть и поле бренд содержит "Бренд-1 "

Подскажите в какую сторону идти. Хотелось бы пример реализации на Yii2, но буду благодарен и за чистый sql пример.

P.S.

Возможно я не так построил таблицу с данными, если да, то подскажите что не так и как лучше.

Спасибо! Всем добра!

Answer 1

Добрый день. На YII2 этот запрос может выглядеть так

Model_name::find()
            ->select('product_id')->distinct()
            ->where('in', 'product_id', ['Бренд-1','Бренд-2'])
            ->orWhere(['between', 'product_id', 'Бренд-1','Бренд-2'])
            ->all();

Детально ознакомиться можно здесь.

Answer 2

Вариант 1

SELECT product_id 
FROM `table`
WHERE (field_id = 1 AND value_string IN ('Бренд-1','Бренд-2'))
   OR (field_id = 2 AND value_int BETWEEN 5 AND 40)
GROUP BY product_id 
HAVING COUNT(DISTINCT field_id) = 2

Вариант 2

SELECT DISTINCT t1.product_id 
FROM `table` t1, `table` t2
WHERE (t1.field_id = 1 AND t1.value_string IN ('Бренд-1','Бренд-2'))
  AND (t2.field_id = 2 AND t2.value_int BETWEEN 5 AND 40)
  AND t1.product_id = t2.product_id

Ну и вообще - уж если взяли модель EAV, так почитайте про неё побольше...

PS. Как это превратить в Yii2-код - я фиг знает.

READ ALSO
Помогите исправить ошибку Mysql Python [требует правки]

Помогите исправить ошибку Mysql Python [требует правки]

Не могу внести данные в базу из таблицы

215
Какая схема хранения дерева в базе подойдет

Какая схема хранения дерева в базе подойдет

Есть огромная вложенность данных, 12 тысзаписей

254
Вызов метода из существующего метода

Вызов метода из существующего метода

Не получается разобраться, каким образом при вызове метода передать в него параметр, кроме как указать его явно в первом методеЗадумка задачи,...

225
Ошибка при изменении версии .NET Framework

Ошибка при изменении версии .NET Framework

С#На Win7 создал проект изначально под

208