如何使用Yii2 PHP框架

时间:2015-05-13 10:22:17

标签: php mysql pagination yii2

我正在执行一个将返回8个结果的查询。这是非常复杂的,所以我不打算在这里发布,因为也许没关系,也许我想做的事情是不可能的,但如果是的话,我希望有人可以指导我。因此,第一个查询返回8个结果,我将获取每个结果行的ID。我这样做是因为在第二个查询中我需要在WHERE NOT IN语句中使用那些ID。我的意思是,第二个查询将返回18个结果,因为8将被忽略,因为它们是在第一个查询中找到的。

让我进一步解释。我有一个查询返回26个结果。但是,如果我不执行第二个查询并将该查询的结果放在结果列表之上,则客户希望按照不可用的条件对这些结果进行排序。我的意思是,现在我有两个查询,而不是一个查询和一个结果列表,但是它们的结果应该合并到一个列表中,其中第一个查询的结果排在最前面。但是分页存在问题。

在使用Yii2 DAO执行第一个查询之前,我正在创建具有等于26的totalCount的分页对象(我有一个计数查询,它将返回我总共有多少结果)。但我的第一个查询有8个结果,第二个得到18.如果我将页面结果显示限制为10,则分页将不起作用。

以下是一些可能有用的伪代码:

// search query that will return number of ids found by certain criteria
$count = $model->countOffers($condition);

// build pagination object
$pagination = new Pagination(['totalCount' => $count, 'pageSize' => 10]);

// execute first query that will return the  array of results
// inside this query $pagination object is used to build LIMIT and OFFSET
$firstQuery = $model->getFirst($condition, $pagination);

// get ID's that should be ignored in next query
foreach ($firstQuery as $data) 
{
    $ignoreIds[] = $data['id'];
}

// execute second query that will return results without $ignoredIds being used
// inside this query $pagination object is used to build LIMIT and OFFSET
// $secondQuery = $model->getSecond($condition, $pagination, $ignoredIds);

// render view and display pagination there, but pager is broken
$this->render('index', ['firstQuery' => $firstQuery, 'secondQuery' => $secondQuery, 'pagination' => $pagination]);

我没有给你具体的代码,因为我不确定我是否想要做可能或不可能的事情。所以我想如果有人可以给我一个线索,如果可以这样做,如果是的话,步骤将是什么。

编辑:这是索引视图:

<?php if ($queryOne): ?>
    <?= $this->render('_index', ['data' => $queryOne]) ?>
<?php endif ?>

<?php if ($queryTwo): ?>
    <?= $this->render('_index', ['data' => $queryTwo]) ?>
<?php endif ?>

1 个答案:

答案 0 :(得分:0)

而是分成2个不同的结果,将缺失的文章标记为&#34;缺少&#34;在左连接中使用复杂查询

select if(missing_id is null, 1,0) missing, ...
from articles as a
left join (select id as missing_id ... your-complex-query) 
  as miss on a.id = miss.missing_id

因此,您将获得26行的单个结果,其中8个缺少为1,其他缺少为0。