За последние 24 часа нас посетили 20732 программиста и 918 роботов. Сейчас ищут 562 программиста ...

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

Тема в разделе "Yii", создана пользователем HTMLord, 26 дек 2017.

Метки:
  1. HTMLord

    HTMLord Новичок

    С нами с:
    26 дек 2017
    Сообщения:
    1
    Симпатии:
    0
    Добрый день!

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

    Код (Text):
    1.  
    2.                 $query = Product::find();
    3.          
    4.                 $pages = new Pagination([
    5.                         'totalCount' => $query->count(),
    6.                         'pageSize' => 15,
    7.                         'forcePageParam' => false,
    8.                         'pageSizeParam' => false,
    9.                 ]);
    10.          
    11.                 $products = $query->offset($pages->offset)->limit($pages->limit)->all();
    12.          
    13.                 return $this->render('index', [
    14.                         'products' => $products,
    15.                         'pages' => $pages,
    16.                 ]);

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

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

    Что-то вроде этого, но только со всеми полями (под мою задачу)

    Код (Text):
    1. SELECT code_medication, MIN(price) FROM tailings t GROUP BY code_medication LIMIT 50;

    Знаю про distinct(), но из доков и мануалов не могу вкурить как он должен меня выручить.

    p.s так что бы пагинация работала. Есть идеи? А то уже голову сломал.
    Заранее большое спасибо
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.548
    Симпатии:
    1.754
    Тут, скорее всего, сложный SQL-запрос нужен, с подзапросом. Что-то типа
    Код (Text):
    1. select product.* from product inner join (select p2.code, min(p2.price) min_price from product p2 group by p2.code) mc on (mc.code=product.code and mc.min_price=product.price)
    --- Добавлено ---
    Сейчас времени нету смотреть, но недавно делал где-то такой запрос через query builder. Но всегда есть findBySql, если что.
     
    denis01 нравится это.