查询时union查完后怎么用limit限制查完的数据? [ 2.0 版本 ]
我想查询一个表的数据,优先查询地区是本地的
$find=$this->find()->where(['>','p_partytime',date('Y-m-d H:i:s',time())])->andWhere(['p_area'=>$area])->orderBy('p_partytime asc');
$not=$this->find()->where(['>','p_partytime',date('Y-m-d H:i:s',time())])->andWhere(['<>','p_area',$area])->orderBy('p_partytime asc');
return $find->union($not)->offset($offset)->limit(10)->asArray()->all();
但执行的sql语句是这样的
(SELECT * FROM `pet_party` WHERE (`p_partytime` > '2016-07-30 18:24:15') AND (`p_area`='2') ORDER BY `p_partytime` LIMIT 10 OFFSET 10) UNION ( SELECT * FROM `pet_party` WHERE (`p_partytime` > '2016-07-30 18:24:15') AND (`p_area` <> '2') ORDER BY `p_partytime` )
而我想要执行的sql语句是这样的
(SELECT * FROM `pet_party` WHERE (`p_partytime` > '2016-07-30 18:24:15') AND (`p_area`='2') ORDER BY `p_partytime`) UNION ( SELECT * FROM `pet_party` WHERE (`p_partytime` > '2016-07-30 18:24:15') AND (`p_area` <> '2') ORDER BY `p_partytime` ) LIMIT 10 OFFSET 10
前面先限制了条数在第一条语句里,而我想两条都查完之后在limit限制条数
请问怎么在我model查询的代码基础上更改?
麻烦各位大神帮忙!
最佳答案
-
我个人认为吧,如果语句复杂,不如直接写sql。
你这个可以这么改return $find->union($not)->offset($offset)->limit(10)->asArray()->all();
改成:
return (new Query())->from(['tmpA' => $find->union($not)])->offset($offset)->limit(10)->all();
最后生成的语句类似如此:
SELECT * FROM ( (SELECT * FROM `pet_party` WHERE (`p_partytime` > '2016-07-30 18:24:15') AND (`p_area`='2') ORDER BY `p_partytime`) UNION ( SELECT * FROM `pet_party` WHERE (`p_partytime` > '2016-07-30 18:24:15') AND (`p_area` <> '2') ORDER BY `p_partytime` ) ) `tmpA` LIMIT 5 OFFSET 0
共 2 条回复@lzrqyc110 666
其他 0 个回答
没有找到数据。
lzrqyc110
注册时间:2016-01-02
最后登录:2018-12-28
在线时长:29小时34分
最后登录:2018-12-28
在线时长:29小时34分
- 粉丝37
- 金钱4195
- 威望40
- 积分4885