Моя система состоит из двух типов пользователей - студентов и преподавателей.
- Репетиторы могут создавать классы и пакеты
- Студенты и преподаватели могут приобрести классы и пакеты
Ниже приведены таблицы
Groups
Users
- Содержит общие поля обоих типов пользователей
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. Я хочу сделать то же самое в одном запросе. Обратите внимание, что условие не может быть добавлено в основной блок where (перед групповым блоком), поскольку в запросе все равно должны отображаться учащиеся (которые не посещали ни одного класса) и преподаватели, которые посещали занятия с id_status = 0.
Счет topics
должен учитывать только условие классов / пакетов, это все, что я хочу. В запросе все равно должны отображаться все пользователи, отображаемые в текущем запросе.
Спасибо
Sandeepan