условное объединение нескольких таблиц базы данных Moodle - PullRequest
0 голосов
/ 19 марта 2019

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

SELECT completion.userid, completion. coursemoduleid, completion. timemodified, 
module.course, user. idnumber as student_id, m.name as module_name, activity.name as activity_name
FROM `mdl_course_modules_completion` as completion

join mdl_course_modules as module 
on completion. coursemoduleid = module.id

join mdl_user as user on user.id = completion.userid

join mdl_modules as m on completion. coursemoduleid = m.id

join 
CASE WHEN module_name = 'assign'THEN 'mdl_assign'
     WHEN module_name = 'assignment'  THEN 'mdl_assignment'
     ELSE "quiz"
END AS activity

on activity.id = m.id LIMIT 0, 30

enter image description here

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

Надеюсь, это поможет вам -

SELECT completion.userid, completion. coursemoduleid, completion. timemodified, 
module.course, user. idnumber as student_id, m.name as module_name,(CASE WHEN (a.name != '') THEN a.name ELSE (CASE WHEN (ass.name != '') THEN ass.name ELSE q.name END) END) as activity_name
FROM `mdl_course_modules_completion` as completion
join mdl_course_modules as module 
on completion. coursemoduleid = module.id
join mdl_user as user on user.id = completion.userid
join mdl_modules as m on completion. coursemoduleid = m.id
left join mdl_assign as a on a.id = m.id
left join mdl_assignment as ass on ass.id = m.id
left join mdl_quiz as q on q.id = m.id
where m.name in ('assign','assignment','quiz')
LIMIT 0, 30
0 голосов
/ 19 марта 2019

Не существует такой вещи, как "условное соединение".Вместо этого вы можете использовать два LEFT JOIN и COALESCE ():

SELECT completion.userid,
  ...
  COALESCE(activity1.name, activity2.name) as activity_name -- SELECT first non NULL value
FROM `mdl_course_modules_completion` as completion
...
LEFT JOIN mdl_assign activity1
  ON  activity1.id = m.id    -- JOIN condition
  AND module_name = 'assign' -- CASE condition
LEFT JOIN mdl_assignment activity2
  ON  activity2.id = m.id        -- JOIN condition
  AND module_name = 'assignment' -- CASE condition
...