Как вывести записи отсеяв копии определенному по полю в yii2?

Добрый день!

Пытаюсь вывести записи, отсеяв копии:

$query = Product::find();
		
		$pages = new Pagination([
			'totalCount' => $query->count(),
			'pageSize' => 15,
			'forcePageParam' => false,
			'pageSizeParam' => false,
		]);
		
		$products = $query->offset($pages->offset)->limit($pages->limit)->all();
		
		return $this->render('index', [
			'products' => $products,
			'pages' => $pages,
		]);


Таблица:
id code name price quantity desc sale

Пробовал groupBy, однако нужно вывести товары с самой низкой ценой.
Задача: Получить все товары так, что бы поле code не дублировалось (есть много записей с одинаковым полем code - код продукта) нужно получить продукты с низкой ценой у каждого code.

Что-то вроде этого, но только со всеми полями (под мою задачу)
SELECT code_medication, MIN(price) FROM tailings t GROUP BY code_medication LIMIT 50;


p.s так что бы пагинация работала. Есть идеи? А то уже голову сломал.
Заранее большое спасибо
  • Вопрос задан
  • 284 просмотра
Решения вопроса 1
mhthnz
@mhthnz
PHP, YII2, Golang, Linux
SELECT DISTINCT code_medication, MIN(price) FROM tailings t GROUP BY code_medication LIMIT 50;


Product::find()
->distinct()
->select('code, MIN(price)')
->from('product')
->groupBy('code');


SELECT * FROM tailings t WHERE t.price = (SELECT MIN(t2.price) FROM tailings t2 WHERE t2.code_medication = t.code_medication) GROUP BY t.code_medication;


$subQuery = (new Query())->select('MIN(t2.price)')->from('tailings t2')->where('t2.code_medication = t.code_medication');
$query = Product::find()->from('tailings t')->where(['t.price' =>  $subQuery])->groupBy('t.code_medication');

$countQuery = clone $query;

$pages = new Pagination([
      'totalCount' => $countQuery->count(),
      'pageSize' => 15,
      'forcePageParam' => false,
      'pageSizeParam' => false,
    ]);
    
$products = $query->offset($pages->offset)->limit($pages->limit)->all();
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rema1ns
@Rema1ns
и так сойдет
distinct() по полю code_medication у модели
Ответ написан
Ваш ответ на вопрос

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

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