Je stocke l'activité de l'utilisateur dans la table par heure de début et de fin, maintenant je veux obtenir tous les enregistrements de ma table d'objet et les enregistrements correspondants de la table de journal.
Ceci est ma table d'objet
Ceci est ma table de journal
Je veux la sortie comme ceci
J'ai essayé d'utiliser du code mais les enregistrements qui ne correspondaient qu'à la table du journal sont renvoyés comme record, c'est ce que j'ai essayé. Toute aide est appréciable.
SELECT SUM(TIMESTAMPDIFF(MINUTE, A.start_time, A.end_time)) AS prep_time, B.subject_name, A.subject_id FROM prep_learn_log A RIGHT JOIN prep_subject B ON A.subject_id = B.subject_id AND B.active = 'Y' WHERE A.user_id = '1' GROUP BY A.subject_id
3 Réponses :
Vous pouvez essayer ci-dessous en mettant A.user_id = '1'
dans On Clause
SELECT SUM(TIMESTAMPDIFF(MINUTE, A.start_time, A.end_time)) AS prep_time, B.subject_name, A.subject_id FROM prep_learn_log A RIGHT JOIN prep_subject B ON A.subject_id = B.subject_id AND B.active = 'Y' and A.user_id = '1' GROUP BY A.subject_id,B.subject_name
Vous devez déplacer la condition where dans la clause ON
SELECT SUM(TIMESTAMPDIFF(MINUTE, A.start_time, A.end_time)) AS prep_time, B.subject_name, A.subject_id FROM prep_learn_log A RIGHT JOIN prep_subject B ON A.subject_id = B.subject_id AND B.active = 'Y' AND A.user_id = '1' GROUP BY A.subject_id
l'utilisation de la colonne jointe à droite dans la condition where fonctionne comme une jointure interne
Comment ça va?
SELECT IFNULL (SEC_TO_TIME (SUM (TIME_TO_SEC (TIMEDIFF (b.end_time, b.start_time)))), "00:00:00") AS prep_time, a.subject_name, a.subject_id FROM prep_subject a JOINT GAUCHE prep_learn_log b ON a.subject_id = b.subject_id AND a.active = 'Y' GROUP BY a.subject_id ORDER BY a.subject_id;