Mon système se compose de deux types d'utilisateurs - Etudiants et tuteurs.
- Tuteurs peuvent créer des classes et des packs
- Les étudiants et les tuteurs peuvent acheter des cours et des packsMysql query help
Voici les tables impliquées
Groups
Users
- Contient des champs communs des deux types d'utilisateurs
Tutor_Details
- Champs spécifiques au tuteur
WebClasses
- Classes créées par les tuteurs
Learning_Packs
- Packs créés par tuteurs Orders
- Un enregistrement par achat
Order_Details
- Plusieurs enregistrements par achat - autant d'articles dans l'achat
Payments
La requête suivante produit la liste de tous les utilisateurs (étudiants et tuteurs) et affiche le 3 utilisateur Fields- nom, orders
- nombre d'articles achetés et topics
- nombre total de classes et des packs créés -
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
aide nécessaireMaintenant, je veux ajouter un autre filtre/condition au comptage topics
. Seuls ces sujets doivent être comptés pour lesquels wc.status = 1 ou lp.status = 1. Je souhaite faire la même chose dans une seule requête. Veuillez noter que la condition ne peut pas être ajoutée à l'intérieur du bloc où block (avant le groupe) car la requête doit toujours afficher les étudiants (qui n'ont pas suivi de cours) et les tuteurs qui ont suivi les classes avec id_status = 0.
topics
count ne devrait considérer que la condition classes/packs, c'est tout ce que je veux. La requête doit toujours afficher tous les utilisateurs tels qu'affichés par la requête actuelle.
Merci,
Sandeepan