有没有办法计算已左连接的数据透视表,然后再次在数据透视表上运行 where 子句以过滤掉不需要的其余部分?
以下是我到目前为止的内容:
SELECT *
FROM
(
SELECT COUNT(user_id) as Count
FROM group_buys
) GroupBuy
LEFT JOIN group_buy_users GroupBuysUser
ON GroupBuysUser.group_buy_id = GroupBuy.id
WHERE GroupBuysUser.user_id = {$this->Auth->user('id')}
我找到了一个解决方案:
SELECT *
FROM group_buys GroupBuy
LEFT JOIN group_buy_users GroupBuysUser
ON GroupBuysUser.group_buy_id = GroupBuy.id
LEFT JOIN (
SELECT group_buy_id, COUNT(user_id) as Count
FROM group_buy_users
GROUP BY group_buy_id
) GroupBuysUserCount
ON GroupBuysUserCount.group_buy_id = GroupBuy.id
LEFT JOIN group_buy_merchant_offers GroupBuysMerchantOffer
ON GroupBuysMerchantOffer.group_buy_id = GroupBuy.id
WHERE GroupBuysUser.user_id = {$this->Auth->user('id')}
GROUP BY GroupBuy.id
HAVING GroupBuy.expiry_date > NOW()
ORDER BY GroupBuysMerchantOffer.bid_price ASC
基本上我只需要做一个 LEFT JOIN 一个虚拟表,该表已经在其 id 上使用团购计数,然后在 user_id 所属的用户上使用 where 子句,然后在 Groupbuy.id 上再次分组以消除重复项。我添加了到期,因为我必须删除所有已过期的旧团购,但这添加了 group_buy_users 表中的组用户计数,然后又添加了 group_buy_users 表,这样我也可以检索其他详细信息。