Mapear lista de arquivos no contexto de atividade de um curso

Mapear lista de arquivos no contexto de atividade de um curso

por Lino Vaz Moniz -
Número de respostas: 0


Passe o parâmetro do curso em c.id = ?

O comando SQL a seguir lista todos os arquivos do contexto de atividade de um curso:

SELECT *
FROM mdl_files f
INNER JOIN mdl_context ct ON f.contextid = ct.id
INNER JOIN mdl_course_modules cm ON ct.instanceid = cm.id
INNER JOIN mdl_modules m ON m.id = cm.module
INNER JOIN mdl_course c ON c.id = cm.course
WHERE ct.contextlevel = 70
AND c.id = ?

O comando SQL a seguir lista todos os arquivos do contexto de atividade de um curso, mas que não são compartilhados com outras atividades de outros cursos ou mesmo outros cursos.

SELECT *
FROM mdl_files f
INNER JOIN mdl_context ct ON f.contextid = ct.id
INNER JOIN mdl_course_modules cm ON ct.instanceid = cm.id
INNER JOIN mdl_modules m ON m.id = cm.module
INNER JOIN mdl_course c ON c.id = cm.course
WHERE ct.contextlevel = 70
AND c.id = ?
AND (
(
SELECT COUNT(f1.contenthash)
FROM mdl_files f1
INNER JOIN mdl_context ct1 ON f1.contextid = ct1.id
INNER JOIN mdl_course_modules cm1 ON ct1.instanceid = cm1.id
INNER JOIN mdl_modules m1 ON m1.id = cm1.module
INNER JOIN mdl_course c1 ON c1.id = cm1.course
WHERE ct1.contextlevel = 70
AND c1.id != c.id
AND f1.contenthash = f.contenthash
) = 0
AND
(
SELECT COUNT(f2.contenthash)
FROM mdl_files f2
INNER JOIN mdl_context ct2 ON f2.contextid = ct2.id
INNER JOIN mdl_course c2 ON ct2.instanceid = c2.id
WHERE ct2.contextlevel = 50
AND c2.id != c.id
AND f2.contenthash = f.contenthash
) = 0
);

Para excluir os links simbólicos e os rascunhos, adicione o filtro ao comando principal:
AND f.filesize > 0 AND f.filearea != 'draft'