terça-feira, 12 de abril de 2011

Extrair o Primeiro Acesso do Aluno no Curso do Moodle com Comando SQL

    Para extrair o primeiro acesso do aluno em um curso do Moodle com comando SQL, basta fazer uma consulta na tabela mdl_log, usando a função MIN do SQL.

    A tabela mdl_log registra todos os cliques que o usuário efetuar no ambiente do Moodle. Para extrair a data do primeiro acesso de um curso, basta efetuar a consulta executando o seguinte comando:

Primeiro acesso de usuário (aluno, tutor etc.) no curso
SELECT MIN(time) FROM mdl_log WHERE userid=? AND course=?
 
Passe o parâmetro id do usuário em userid=?  e  id do curso em course=?

Caso queira extrair uma lista de todos os alunos com a data do primeiro acesso de um determinado curso, execute o seguinte comando SQL:

Primeiro acesso de todos os alunos de um determinado curso

SELECT u.id, u.firstname,u.lastname,MIN(l.time) FROM mdl_role_assignments rs INNER JOIN mdl_user u ON u.id=rs.userid INNER JOIN mdl_context e ON rs.contextid=e.id INNER JOIN mdl_log l ON l.userid=u.id  WHERE e.contextlevel=50 AND rs.roleid=5 AND e.instanceid=? AND l.course=? GROUP BY u.id, u.firstname,u.lastname

Passe o parâmetro  id do curso em e.instanceid=?  e  l.course=?

     A data do primeiro acesso é recuperada na coluna time da tabela mdl_log. Vem em quantidade de segundos. É necessário fazer conversão para entender. Bem, neste caso é hora de usar uma linguagem de programação da  sua preferencia para converter. 


Veja Também
Extrair o Primeiro Acesso de um Participante no Curso do Moodle com Programação PHP 

16 comentários:

  1. Olá, estava lendo algumas das suas postagens hoje e queria saber se vc sabe como fazer essa conversao de data, converter de segundos para data.

    ResponderExcluir
  2. Marcela,
    Use a seguinte função de data do PHP:
    date("d/m/Y",$dataemsegundos)

    Dê uma olhada nesse post:
    http://moodlephp.blogspot.com/2010/11/relatorio-do-periodo-da-validade-da.html

    ResponderExcluir
  3. olá

    como fazer pra listar somente os cursos do usuario logado?

    em uma pagina separada ?

    ResponderExcluir
  4. A conversão da data pode ser feita tambem pelo proprio MySQL.

    Acrescente esse comando e corra para o abraço
    SELECT from_unixtime(MIN(l.time),'%d/%m/%Y %H:%i:%s') as dataHora FROM mdl_log WHERE userid=? AND course=?

    Facil facil

    De: William DS www.praweb.cm.br/forum

    ResponderExcluir
  5. como pergar o último Resultset no moodle ? Sei que a função get_recordset_sql() pega os dados da tabela SQL do moodle, mas, por exemplo, se eu tenho mais de 5 linhas no meu banco de dados e eu quero pegar a ultima linha, normalmente eu usaria o .last() se fosse num Resultset normal...

    ResponderExcluir
    Respostas
    1. Daniel,
      Para retornar o último registro da base de dados há duas formas.

      Primeira Alternativa
      Carregar todos os registros em um array e depois extrair o último elemento do array. Esse caminho é menos indicado.

      Segunda Alternativa
      Faça uma consulta SQL parar extrair o último registro. Localize o último id gerado na por meio do comando MAX. Vejo o exemplo: SELECT MAX(id ) FROM tabelaxx

      Na posse do id do último registro, faça uma consulta para extrair a linha da tabela através do comando WHERE. Exemplo: SELECT * FROM tabelax WHERE id=?

      Excluir
  6. Badiu como saber a quantidade de horas ? que a pessoa ficou a partir do mdl_log ?

    ResponderExcluir
    Respostas
    1. Rafael,
      O tempo de acesso é uma informação que está no log do Moodle, porém precisa ser computada. Veja nesse post http://gmoodle.blogspot.com.br/2013/02/indicadores-de-monitoramento-de-acesso.html. Há uma parte que fala da metodologia de cálculo do tempo de acesso. Isso requer programação. Só comando SQL não resolve.

      Excluir
  7. Boa tarde Badiu!!
    Quero saber como eu posso pegar aquelas informações de acesso do aluno que ficam na URL /user/view.php?id=225&course=36.
    Estou criando um sistemas que mostra ás informações do aluno tipo disciplina, tutor , acesso e atividades.
    A questão é a hora do primeiro e ultimo acesso, estou buscando essa informação no mdl_log, porem esta vido defasada , sei da diferença de horário do servidor , mas na URL do perfil do aluno mostra exatamente a hora de entrada e saída.
    ex:
    select MAX(data_acesso) as firstaccess from buscaacessosalunosead where lower(trim(username)) = lower($matricula) AND data_acesso <> '' limit 1

    Você pode me ajudar?

    ResponderExcluir
    Respostas
    1. Obs:
      a atabela
      ( buscaacessosalunosead ) é um VIEWS criada com base na tabela mdl_log do moodle

      segue a consulta que faço na MDL_LOG

      SELECT to_char(from_unixtime(MAX(time)),'DD-MM-YYYY HH:MM') as firstaccessd FROM mdl_log WHERE userid=$usa_id AND course = $curso_id "
      Abraços!!

      Excluir
    2. Marcos tudo beleza?
      Para tirar a hora do primeiro e último acesso, extraia informação do campo time da tabela mdl_log e depois, tire informação da hora com conversor/formatação de data.
      Segue comando SQL para tirar data primeiro/último acesso.

      1- Primeiro acesso do usuário no Moodle
      SELECT MIN(time) FROM mdl_log WHERE userid=?

      2- Primeiro acesso do usuário no curso
      SELECT MIN(time) FROM mdl_log WHERE userid=? AND course=?
      3- Último acesso do usuário no Moodle
      SELECT MAX(time) FROM mdl_log WHERE userid=?

      4- Último acesso do usuário no curso
      SELECT MAX(time) FROM mdl_log WHERE userid=? AND course=?

      Excluir
    3. Obrigado meu nobre!!!! sucesso para vc ..Deus abençoei

      Excluir
  8. Bom dia Badiu!!
    espero que esteja tudo bem.
    Surgiu uma outra questão com relação a busca de acessos de usuários.
    Teria como pegar os acessos de alunos sem ser por meio da mdl_log?
    tem alunos muito antigos que retornam a faculdade querendo o abono das mensalidades por não ter cursado, temos o registro desse aluno no moodle mas não no mdl_log por causa de espaço apagamos.
    teria como fazer uma busca nas tabelas e extrair esse acesso?
    Desde já agradeço !!!

    ResponderExcluir
    Respostas
    1. Marcos,
      É possível sim rastrear registro de participação de alunos sem ser pela tabela de log. Neste caso, faça rastreamento nas tabelas de nota, atividades como fórum,questionário etc.
      Dê uma olhada nesse post http://moodlesql.blogspot.com.br/2010/10/apagar-nota-atividades-e-log-do-aluno.html que indica as tabelas em que devem ser removidas registros dos alunos. No seu caso, como precisa recuperar, use comando SELECT ao invés de DELETE

      Excluir
    2. Obrigado meu caro!!
      Sucesso sempre...°/

      Excluir