N° de Badges em uma coluna Mysql

N° de Badges em uma coluna Mysql

por Samanta Marques -
Número de respostas: 14

Olá,

Eu preciso do número de badges que cada usuário possui. Não importa a forma pois só preciso da quantidade de badges que cada usuário têm.

No arquivo mybadges é possível verificar individualmente o número de badges de cada usuário. 

$totalcount = count($badges);

Mas eu gostaria de uma forma de obter de todos em uma única página ou arquivo ou até mesmo em uma coluna Mysql.

Da última vez, acreditem, contei de cada usuário, mas eram poucas, foi fácil, agora jamais conseguiria.

Bjs, obrigada !

Contagem das avaliações:  -
Em resposta à Samanta Marques

Re: N° de Badges em uma coluna Mysql

por Willian Mano -

Faz uma query pra pegar, já que você quer a quantidade de badges por pessoa independente da forma.

$sql = "SELECT userid, u.firstname, u.lastname, count(userid) as qtd
             FROM {badge_issued} b
             INNER JOIN {user} u ON u.id = b.userid
             GROUP BY b.userid
             ORDER BY u.firstname";

$DB->get_records_sql($sql);

Talvez seja necessário você declarar a variável global DB no início da função, caso ela ainda não esteja sendo declarada.

global DB;

Contagem das avaliações:  (1)
Em resposta à Willian Mano

Re: N° de Badges em uma coluna Mysql

por Samanta Marques -
Eii Willian,

 De toda forma que tento um erro é retornado ou a página fica carregando  ou aparece vazia.

Parse error: syntax error, unexpected '$DB' (T_VARIABLE) in /home/profe438/public_html/salavirtual/badges/contar.php on line 11

Esse é um último erro, já tentei declarar a global de várias formas em vários locais.

-------------------------------------

Não seria possível fazer uma cópia dessa página e alterar as váriais para que ao inves de mostrar de um usuário mostre de todos ? 

require_once(dirname(dirname(__FILE__)) . '/config.php');
require_once($CFG->libdir . '/badgeslib.php');
require_once($CFG->libdir . '/filelib.php');

$page        = optional_param('page', 0, PARAM_INT);
$search      = optional_param('search', '', PARAM_CLEAN);
$clearsearch = optional_param('clearsearch', '', PARAM_TEXT);
global $DB;


require_login();

if (empty($CFG->enablebadges)) {
    print_error('badgesdisabled', 'badges');
}

$url = new moodle_url('/badges/mybadges.php');
$PAGE->set_url($url);

if (isguestuser()) {
    $PAGE->set_context(context_system::instance());
    echo $OUTPUT->header();
    echo $OUTPUT->box(get_string('error:guestuseraccess', 'badges'), 'notifyproblem');
    echo $OUTPUT->footer();
    die();
}

if ($page < 0) {
    $page = 0;
}

if ($clearsearch) {
    $search = '';
}

if ($hide) {
    require_sesskey();
    $DB->set_field('badge_issued', 'visible', 0, array('id' => $hide, 'userid' => $USER->id));
} else if ($show) {
    require_sesskey();
    $DB->set_field('badge_issued', 'visible', 1, array('id' => $show, 'userid' => $USER->id));
} else if ($download && $hash) {
    require_sesskey();
    $badge = new badge($download);
    $name = str_replace(' ', '_', $badge->name) . '.png';
    $filehash = badges_bake($hash, $download, $USER->id, true);
    $fs = get_file_storage();
    $file = $fs->get_file_by_hash($filehash);
    send_stored_file($file, 0, 0, true, array('filename' => $name));
} else if ($downloadall) {
    require_sesskey();
    badges_download($USER->id);
}

$context = context_user::instance($USER->id);
require_capability('moodle/badges:manageownbadges', $context);

$PAGE->set_context($context);

$title = get_string('badges', 'badges');
$PAGE->set_title('Minhas Medalhas');
$PAGE->set_heading(fullname($USER));
$PAGE->set_pagelayout('mydashboard');

// Include JS files for backpack support.
badges_setup_backpack_js();

$output = $PAGE->get_renderer('core', 'badges');
$badges = badges_get_user_badges($USER->id);

echo $OUTPUT->header();
$totalcount = count($badges);
$records = badges_get_user_badges($USER->id, null, $page, BADGE_PERPAGE, $search);

$userbadges             = new badge_user_collection($records, $USER->id);
$userbadges->sort       = 'dateissued';
$userbadges->dir        = 'DESC';
$userbadges->page       = $page;
$userbadges->perpage    = BADGE_PERPAGE;
$userbadges->totalcount = $totalcount;
$userbadges->search     = $search;

echo $output->render($userbadges);

echo $OUTPUT->footer();

Obrigada

Contagem das avaliações:  -
Em resposta à Samanta Marques

Re: N° de Badges em uma coluna Mysql

por Samanta Marques -
Quase resolvido,


No ad-hoc_contributed aqui do moodle consegui encontrar algo semelhante ao que preciso na parte de Badges.

O usuário postou o seguinte código (fiz algumas adaptações para meu banco de dados:

'SELECT u.username, (SELECT COUNT(*) FROM mdl_badge_issued AS d WHERE d.userid = u.id) AS earned
FROM mdl_user AS u
ORDER BY earned DESC, u.username ASC';

Minha dúvida é, ONDE e COMO coloco esse código de modo que ele mostre os resultados na página.

Criei uma página Php e ela aparece em branco.

Sei que provavelmente é um problema bobo mas não sei como fazer...

Se alguém puder ajudar, obrigada !

Contagem das avaliações:  -
Em resposta à Samanta Marques

Re: N° de Badges em uma coluna Mysql

por Willian Mano -

Essa query faz a mesma coisa da que eu enviei. A diferença é que essa dai usa subquerie, o que pode pesar no banco. A que eu mandei é mais rápida.

Você vai usar isso na página que quer que seja impressa a relação dos usuários com quantidade retornado na busca... como fazer isso é vc quem faz.

Pelo que vi, vc criou um arquivo chamado contar.php, sendo assim, altera esse arquivo.

Contagem das avaliações:  -
Em resposta à Samanta Marques

Re: N° de Badges em uma coluna Mysql

por Willian Mano -

Essa query faz a mesma coisa da que eu enviei. A diferença é que essa dai usa subquerie, o que pode pesar no banco. A que eu mandei é mais rápida.

Você vai usar isso na página que quer que seja impressa a relação dos usuários com quantidade retornado na busca... como fazer isso é vc quem faz.

Pelo que vi, vc criou um arquivo chamado contar.php, sendo assim, altera esse arquivo.

Contagem das avaliações:  -
Em resposta à Willian Mano

Re: N° de Badges em uma coluna Mysql

por Samanta Marques -

Willian, obrigada por me ajudar, é tudo muito novo para mim,

Fiquei desde o momento de sua resposta até agora procurando uma forma de não incomoda-lo novamente, mas sinceramente não sei como resolver.

Tenho uma página Php que fica dentro da pasta moodle, o nome dela é contador.php, coloquei o seguinte nela:

<?php

# Conexão
mysql_connect('localhost', 'usuario', 'minhasenha') or die('Ops, algo errado' . mysql_error());
# Meu banco de dados
    mysql_select_db('meubancodedados') or die('Ops, algo errado');
    
# O código indicado por você, fiz apenas uma alteração em mdl_badge_issued   
$sql = "SELECT userid, u.firstname, u.lastname, count(userid) as qtd
             FROM {mdl_badge_issued} b
             INNER JOIN {user} u ON u.id = b.userid
             GROUP BY b.userid
             ORDER BY u.firstname";

$DB->get_records_sql($sql);

?>

Esse erro é retornado

Fatal error: Call to a member function get_records_sql() on a non-object in /home/profe438/public_html/salavirtual/contar.php on line 15

Novamente obrigada, 



Contagem das avaliações:  -
Em resposta à Samanta Marques

Re: N° de Badges em uma coluna Mysql

por Willian Mano -

Eu não gosto de responder entregando o código pronto para a pessoa, prefiro tentar ensinar e mostrar o caminho das pedras, mas vai ficar complicado fazer isso sem dedicar um pouco de tempo, então segue a solução. Copia o código e cola no seu contar.php.

Ah, não vai se acostumando com esse tipo de resposta. =)

Se você não é desenvolvedora procure um apto da próxima vez que tiver um problema desses, mas se você for, estude um pouco mais a linguagem e o espaguete do moodle. São apenas dicas, não vá se ofender. =P

https://gist.github.com/willianmano/9e39bf4c2c8ab8b90022568733f561ac

O resultado em anexo.

Anexo emblemas.png
Contagem das avaliações:  (1)
Em resposta à Willian Mano

Re: N° de Badges em uma coluna Mysql

por Samanta Marques -

Willian, eu sinceramente não sei como agradecer, eu sei que essa não é a forma correta de aprender e jamais ficaria ofendida com uma pessoa que está me ajudando dessa forma, muito pelo contrário tenho uma gratidão enorme em relação a isso.

-----------------

Eu comecei a estudar Php faz pouquíssimo tempo, para ser sincera as vezes até me assusto, sei lá é muita informação. Mas decidi que quero aprender, quero muito.

---------------

Eu coloquei o código, porém o erro continua sendo retornado dizendo que existe um Erro ao ler a base de dados. Será que é algum erro de nome, engraçado que esse erro já estava acontecendo antes. 

Tenho a sensação que o erro encontra-se nesse código:

$sql = "SELECT userid, u.email, u.firstname, u.lastname, count(userid) as qtd
        FROM cursosabertos.mdl_badge_issued b
        INNER JOIN mdl_user u ON u.id = b.userid
        GROUP BY userid
        ORDER BY qtd DESC, u.firstname ASC"

--------------

Uma dúvida: >> cursosabertos << precisa ser alterado ? 

--------------

O me comprometo a estudar e um dia poder ajudar aqui no fórum. Eu apaguei e escrevi essa mensagem com vergonha, pois sei que estou pedindo demais, mas é que está tão perto do fim, sinto que é algum termo meu que difere do seu.

Contagem das avaliações:  -
Em resposta à Samanta Marques

Re: N° de Badges em uma coluna Mysql

por Willian Mano -

Sim, vc precisa remover o cursos abertos. Esqueci de remover... hehe


Contagem das avaliações:  -
Em resposta à Willian Mano

Re: N° de Badges em uma coluna Mysql

por Samanta Marques -

Meu querido muito obrigada, sinceramente não sei como agradecer.

Vou me dedicar mais nos estudos em PhP.

Tudo perfeito,

Valeu mesmo,


Contagem das avaliações:  -
Em resposta à Samanta Marques

Re: N° de Badges em uma coluna Mysql

por Willian Mano -

Altera o SQL pra isso aqui....


$sql = "SELECT userid, u.email, u.firstname, u.lastname, count(userid) as qtd

        FROM {badge_issued} b

        INNER JOIN {user} u ON u.id = b.userid

        GROUP BY userid

        ORDER BY qtd DESC, u.firstname ASC"

Contagem das avaliações:  (1)
Em resposta à Willian Mano

Re: N° de Badges em uma coluna Mysql

por Samanta Marques -

Alterei, já estou até arriscando algumas mudanças, só para ir tentando entender o código. A principio estou confusa com esses pontos, quando chama o banco de dados, mas entendi a função, só é um pouco confuso, rsrsr

Está perfeito, funcionando como eu precisava !

Mais uma vez muito obrigada !

Contagem das avaliações:  -
Em resposta à Samanta Marques

Re: N° de Badges em uma coluna Mysql

por Willian Mano -

É assim mesmo, um passo de cada vez. =)

Qualquer nova dúvida posta ai no fórum. Se tiver telegram pode entrar no grupo do moodlebrasil, mas só peço que dúvidas assim sejam postadas no fórum, não no grupo.

Link do grupo no telegram: https://telegram.me/moodlebrasil

Contagem das avaliações:  (1)