Mysql - Право соединения не получить правильные данные - PullRequest
0 голосов
/ 14 января 2019

Я сохраняю активность пользователя в таблице по времени начала и окончания, теперь я хочу получить все записи из моей предметной таблицы и сопоставленные записи из таблицы журнала.

Это моя тематическая таблица

enter image description here

Это моя таблица журналов

enter image description here

Я хочу вывод, подобный этому

enter image description here

Я попытался использовать некоторый код, но записи, которые соответствуют только таблице журналов, возвращаются как записи. Это то, что я пробовал. Любая помощь заметна.

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 ]

0 голосов
/ 14 января 2019

Вы должны переместить условие where в предложении 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

использование правого объединенного столбца, в котором условие работает как внутреннее соединение

0 голосов
/ 14 января 2019

Как это?

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 LEFT JOIN 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;

Вместо этого я переключился на LEFT JOIN и TIMEDIFF, потому что не мог заставить TIMESTAMPDIFF работать на моей стороне.

0 голосов
/ 14 января 2019

Вы можете попробовать ниже, введя A.user_id = '1' в 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
...