我正在执行一个将返回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 ?>
答案 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。