Сортировка данных

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
vad
Сообщения: 11
Зарегистрирован: 2017.02.01, 22:56

Сортировка данных

Сообщение vad »

Здравствуйте!
Помогите, пожалуйста, решить задачу.
Есть таблица такого вида:

Код: Выделить всё

|	id	|	time		|
-----------------------------------------
|	1	|	1488718805	|
|	2	|	1488718815	|
|	3	|	1488718810	|
|	4	|	1488718800	|
|	5	|	1488718820	|

...

Нужно в самом верху вывести данные где time<1488718815,
а потом ниже остальное отсортированное по id в обратном порядке.

Должно получиться вот так:

Код: Выделить всё

|	id	|	time		|
-----------------------------------------
|	4	|	1488718800	|
|	1	|	1488718805	|
|	3	|	1488718810	|
|	5	|	1488718820	|
|	2	|	1488718815	|

...
Данные вывожу через gridview.
Заранее спасибо!
Аватара пользователя
gud3
Сообщения: 23
Зарегистрирован: 2017.03.15, 15:05
Контактная информация:

Re: Сортировка данных

Сообщение gud3 »

Вам в провайдер нужно загружать уже осортированные данные, покажите запрос на выборку из бд, я вам помогу.
vad
Сообщения: 11
Зарегистрирован: 2017.02.01, 22:56

Re: Сортировка данных

Сообщение vad »

gud3 писал(а): 2017.03.21, 08:04 Вам в провайдер нужно загружать уже осортированные данные, покажите запрос на выборку из бд, я вам помогу.

Код: Выделить всё

'query' => Data::find()
Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Re: Сортировка данных

Сообщение futbolim »

Код: Выделить всё

Data::find()->orderBy(['created_at' => SORT_DESC, 'id' => SORT_DESC])
vad
Сообщения: 11
Зарегистрирован: 2017.02.01, 22:56

Re: Сортировка данных

Сообщение vad »

futbolim писал(а): 2017.03.21, 13:40

Код: Выделить всё

Data::find()->orderBy(['created_at' => SORT_DESC, 'id' => SORT_DESC])
Нужно в самом верху вывести где данные в колонке time меньше текущего времени (для примера time<1488718815) и отсортированные по time ASC. Потом ниже все остальное отсортированное по id DESC. В таблице больше 5 строк, я просто показал пример.
Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Re: Сортировка данных

Сообщение futbolim »

Ну так выводите.
Это пример.
Вам лень думать - мне тем более.
Аватара пользователя
rodion_zlobin
Сообщения: 207
Зарегистрирован: 2017.01.11, 16:33

Re: Сортировка данных

Сообщение rodion_zlobin »

Data::find()->where(['<', 'created_at', '1488718815'])->orderBy(['created_at' => SORT_DESC, 'id' => SORT_DESC])
olegtmb
Сообщения: 18
Зарегистрирован: 2013.08.06, 20:27

Re: Сортировка данных

Сообщение olegtmb »

Можно сделать две выборки с ограничением по полю created_at с разным порядком сортировки.
Затем объединить их, например в 'allModels' в ArrayDataProvider
vad
Сообщения: 11
Зарегистрирован: 2017.02.01, 22:56

Re: Сортировка данных

Сообщение vad »

olegtmb, Спасибо! Сделал по вашему совету и все получилось.
Всем остальным тоже спасибо за потраченное на меня время!

P.S. Все же интересно, такое вообще возможно сделать одним запросом?
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: Сортировка данных

Сообщение caHek2x »

vad писал(а): 2017.03.21, 18:41 P.S. Все же интересно, такое вообще возможно сделать одним запросом?
сделать два подзапроса обьединенных в один ...
dmg
Сообщения: 685
Зарегистрирован: 2012.10.15, 03:09

Re: Сортировка данных

Сообщение dmg »

vad писал(а): 2017.03.21, 18:41 olegtmb, Спасибо! Сделал по вашему совету и все получилось.
Всем остальным тоже спасибо за потраченное на меня время!

P.S. Все же интересно, такое вообще возможно сделать одним запросом?
UNION в sql отменили?
http://www.yiiframework.com/doc-2.0/gui ... html#union
Nerf
Сообщения: 780
Зарегистрирован: 2015.01.29, 00:37

Re: Сортировка данных

Сообщение Nerf »

vad писал(а): 2017.03.21, 18:41 P.S. Все же интересно, такое вообще возможно сделать одним запросом?
ORDER BY CASE WHEN `time` < '1488718815' THEN `time` ELSE '1488718815' END ASC, `id` DESC
Ответить