【发布时间】:2011-04-28 12:37:37
【问题描述】:
我的系统包含两种用户类型 - 学生和导师。
- 导师可以创建课程和包
- 学生和导师都可以购买课程和包
以下是涉及的表格
GroupsUsers- 包含两种用户类型的公共字段Tutor_Details- 导师特定字段WebClasses - 导师创建的课程Learning_Packs - 创建的包由导师
Orders - 每次购买一条记录Order_Details - 每次购买多条记录 - 购买的商品数量相同Payments
以下查询生成所有用户(学生和导师)的列表并显示 3 个字段 - 用户名、orders - 购买的物品数量和 topics - 创建的课程和包的总数 -
SELECT u.name,
COUNT(DISTINCT( o.id_order )) AS
orders,
( ( COUNT(DISTINCT( wc.id_wc )) ) + ( COUNT(DISTINCT( lp.id_lp )) ) ) AS
topics
FROM users AS u
LEFT JOIN tutor_details AS td
ON u.id_user = td.id_user
INNER JOIN groups AS g
ON u.id_group = g.id_group
LEFT JOIN webclasses AS wc
ON td.id_tutor = wc.id_author
LEFT JOIN learning_packs AS lp
ON td.id_tutor = lp.id_author
LEFT JOIN orders AS o
ON ( u.id_user = o.id_user )
LEFT JOIN order_details AS od
ON ( o.id_order = od.id_order )
LEFT JOIN payments AS p
ON ( o.id_order = p.id_order )
WHERE IF(o.id_order != 0, o.order_status = 'paid', 1)
AND IF(p.id_payment != 0, p.payment_status = 'success', 1)
GROUP BY u.id_user
ORDER BY u.id_user ASC
需要帮助
现在,我想在topics 计数中添加另一个过滤器/条件。仅应计算 wc.status=1 或 lp.status=1 的那些主题。我希望在单个查询中做同样的事情。请注意,不能将条件添加到 main where 块内(在 group 块之前),因为查询仍然必须显示学生(没有上过任何课)和上过课 id_status = 0 的导师。
topics 计数应该只考虑类/包条件,这就是我想要的。该查询仍应显示当前查询所显示的所有用户。
谢谢,
桑迪潘
【问题讨论】:
标签: mysql count conditional sum join