->alias('b')
->field(['(b.order_amount + b.store_amount) as total','b.create_time','b.order_id','b.pay_types'])
->where("b.order_status = 2")
->union(['select pay_amount as total,create_time,recharge_id as order_id,pay_type as pay_types from tp_recharge'])
->buildSql();
如上 执行之后 sql 语句为
SELECT (b.order_amount + b.store_amount) as total,`b`.`create_time`,`b`.`order_id`,`b`.`pay_types` FROM `tp_order` `b` UNION ( select pay_amount as total,create_time,recharge_id as order_id,pay_type as pay_types from tp_recharge ) WHERE ( b.order_status = 2 )
where 条件放到最后执行了,我想要的是 把where 条件查询第一个表的后面,请问大家如何解决这个问题的
用一个中间表操作,
1.把要查询的表各自用buildSql()生成sql ,
2.用一个中间把所有要查询的表全部union起来,再用buildSql()生成sql。
先生成sql,多个表以此类推,要where或者其他操作都可以,要注意的是 查询的字段都要保持一致,包括中间表
中间表把所有sql union 起来
最后使用使用子查询构造新的查询
最后这步可以使用分页