SQL 排序:使用 DESC 对块进行排序 - 但每个块在其内部按 ASC 排序

SQL sorting: order blocks with DESC - but each block is sorted ASC within itself

我有一个 SQL table,其中包含消息及其发布日期。

我们将这些消息称为 M1、M2、... M99。 M1 是最新消息。

我想以 whatsapp 的方式显示它们(我使用的是 Yii 1.1 框架): 最新的消息M1在底部,上面是第二个最新的M2消息,依此类推

但我想按固定数量的消息块(假设为 5)显示它们,如果需要,我将加载以前的消息。所以当加载页面时你应该看到:

(加载更多按钮)

M5

M4

M3

M2

M1

当点击一次加载更多按钮时,我将有,从上到下:

(加载更多按钮)/M10/M9/M8/M7/M6/M5/M4/M3/M2/M1

我正在尝试在 Yii 上使用 ActiveDataProvider 来实现这一点,但是为此,我需要像这样对数据进行排序:

M5,M4,M3,M2,M1,M10,M9,M8,M7,M6,M15,M14,M13,M12,M11等

我不确定如何实现这种排序,即使使用限制和偏移量也是如此。

如果有人能帮助我,我会很高兴,谢谢!

编辑: 这是我正在使用的 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',
)); ?>

您可以使用 setData() and getData() 反转数据提供程序中项目的顺序:

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

$dataProvider->getData() 将 return 个页面项目倒序排列。