Сортировка SQL: упорядочить блоки с DESC - но каждый блок сортируется ASC внутри себя - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть таблица SQL с сообщениями и датой их публикации.

Давайте назовем эти сообщения M1, M2, ... M99.M1 - самое новое сообщение.

Я хочу отобразить их (я использую Yii 1.1 framework) в виде WhatsApp: самое новое сообщение M1 находится внизу, а над ним - второе новейшее сообщение M2 и т. Д..

Но я хочу отобразить их по блокам с фиксированным номером сообщения (скажем, 5), и я буду загружать предыдущее сообщение, если потребуется.Поэтому при загрузке страницы вы должны увидеть:

(кнопка «Загрузить еще»)

M5

M4

M3

M2

M1

При однократном нажатии на кнопку «загрузить больше» у меня будет сверху вниз:

(кнопка «загрузить еще») / M10 / M9 / M8 / M7 /M6 / M5 / M4 / M3 / M2 / M1

Я пытаюсь добиться этого с помощью ActiveDataProvider на Yii, однако для этого мне нужно отсортировать данные следующим образом:

M5, M4, M3, M2, M1, M10, M9, M8, M7, M6, M15, M14, M13, M12, M11 и т. Д.

Я не уверен, как добиться такой сортировки, даже используя лимит и смещение.

Я был бы рад, если бы кто-нибудь мог помочь мне в этом, спасибо!

edit: Вот ActiveDataProvider, который я использую

public function getMessagesDataProvider()
{
    $dataProvider = new CActiveDataProvider(Message::model(), array(
        'criteria' => array(
            'condition' => 't.inquiry_thread_id = :threadId',
            'params' => array(':threadId' => $this->id),
            'order' => 't.created_at DESC',
        ),
        'pagination' => array('pageSize' => 5, 'pageVar' => 'page'),
    ));
    $dataProvider->getData();
}

А на мой взгляд

<?php $this->widget('\common\widgets\ListView', array(
    'dataProvider' => $messagesDataProvider,
    'pager' => array(
        'class' => '\common\widgets\LoadMorePager',
        'canBeReloadedByAjax' => true,
    ),
    'template' => '{pager}{items}',
    'itemView' => '/message/_messageItem',
    'itemsCssClass' => 'pager-container',
    'pagerCssClass' => 'inquiry-message-button',
)); ?>

1 Ответ

0 голосов
/ 24 сентября 2018

Вы можете использовать setData() и getData(), чтобы изменить порядок элементов в поставщике данных:

$dataProvider->setData(array_reverse($dataProvider->getData()));

$dataProvider->getData() вернет элементы страницыв обратном порядке.

...