yii2 子查询

//查询出每个用户个数,等于,是first和last个数的数据

SELECT
customer.id,
customer.name,
customer.level,
record.total,
customer.customer_id,
customer.nick
FROM
(
SELECT
COUNT( c.id ) AS total,
c.customer_id,
b.box_id
FROM
yifan_box a,
yifan_box_product b,
yifan_raffle_record c
WHERE
c.lottery_type > 0
AND a.id = b.box_id
AND b.id = c.`product_id`
AND a.status = 3
GROUP BY
b.box_id,
c.customer_id
) record,
(
SELECT
a.id,
c.customer_id,
a.name,
b.level,
d.nick,
b.box_id
FROM
yifan_box a,
yifan_box_product b,
yifan_raffle_record c,
gacha_customer d
WHERE
a.id = b.box_id
AND ( b.level = 0 OR b.level = - 1 )
AND b.id = c.`product_id`
AND c.customer_id = d.customer_id
AND a.status = 3
GROUP BY
a.id,
c.customer_id,
b.level
) customer
WHERE
record.customer_id = customer.customer_id
AND record.box_id = customer.box_id
ORDER BY
record.box_id DESC
$countTotal = YifanRaffleRecord::find()->alias('c')->select("COUNT( c.id ) AS total,c.customer_id,yifan_box_product.box_id")->joinWith(['product.box'=>function($query){
$query->andwher(['in',]);
}])->where(['>', 'c.lottery_type', 0])->groupBy('yifan_box_product.box_id,c.customer_id');

$countFirstLast = YifanRaffleRecord::find()->alias('c')->select('yifan_box.id,c.customer_id,yifan_box.name,yifan_box_product.level,gacha_customer.nick,yifan_box_product.box_id,yifan_box.start_time,yifan_box.end_time')->joinWith('product.box')->joinWith('user')->where(['<=', 'c.lottery_type', 0])->groupBy('yifan_box.id,c.customer_id,yifan_box_product.level');

$expression1 = new \yii\db\Expression('customer.customer_id');
$expression2 = new \yii\db\Expression('customer.box_id');
$query = (new Query())->select('customer.id,customer.name,customer.level,record.total,customer.customer_id, customer.nick,customer.start_time,customer.end_time')->from(['record' => $countTotal, 'customer' => $countFirstLast])
->where(['record.customer_id' => $expression1, 'record.box_id' => $expression2])->orderBy('record.box_id DESC');


posted @ 2019-11-07 17:43  星云惊蛰  阅读(1012)  评论(0)    收藏  举报