Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Shelley Macedo

Count, sum e select repetindo em array

Recommended Posts

Oi galera, sou nova aqui e estou com um problemão:

Eu preciso trazer tempo e quantidade de acesso de cada página em um sistema de ensino e tais são agrupados por módulo.

Criei os foreachs, até aí belezinha... o problema é que tento exibir o agrupamento por módulos e o os dados ficam repetidos no segundo. Por ex.:

[0] = [15][30][31] //correto

[1] = [15][30][31] //errado. não pode repetir

 

Segue meu código aí, se alguém puder me ajudar, já tentei de tudo, mas não consigo montar o select...

 

$user_id = post("id_user");

$curso_id = post("id_curso");

$data_i = post("data_i");

$data_f = post("data_f");

$modulo = array();

 

$sql_modulos = $database->listAll($database->query("SELECT mcs.section FROM mdl_course_sections mcs WHERE mcs.course = ".$curso_id." GROUP BY mcs.section ORDER BY mcs.section"));

 

foreach($sql_modulos as $md) {

$modulo[$md['section']] = array();

$sql_pagina = $database->listAll($database->query("SELECT p.id FROM mdl_page p INNER JOIN mdl_course_sections mcs ON (p.course = mcs.course) WHERE p.course = ".$curso_id." AND mcs.section = ".$md['section'].""));

 

foreach($sql_pagina as $pg) {

$modulo[$md['section']][] = $pg['id'];

}

 

}

 

echo "<div id='tab_atividades' class='font'>

<div id='titulo_tab' style='width: 185px;'> Recurso / Atividade </div>

<div id='titulo_tab' style='width: 85px;'> Instrumento </div>

<div id='titulo_tab'>Acessos </div>

<div id='titulo_tab'> Tempo de Acesso </div>

<div id='titulo_tab' style='width: 95px;'> Primeiro Acesso </div>

<div id='titulo_tab' style='width: 95px;'> Último Acesso </div>";

 

 

 

foreach ($modulo as $secao => $paginas) {

 

echo "<div id='tab_modulo'> MÓDULO ".$secao."</div><br />";

 

foreach ($paginas as $pagina) {

 

$sql_periodos = $database->query(

"SELECT l.course, p.name AS nome_atividade,

IF((p.id = ".$pagina." AND mcs.section = ".$secao."), (COUNT(l.cmid)),('')) AS qtd_acesso_atividade,

IF((p.id = ".$pagina." AND mcs.section = ".$secao."), (MIN(l.time)), ('')) AS primeiro_acesso_atividade,

IF((p.id = ".$pagina." AND mcs.section = ".$secao."), (MAX(l.time)), ('')) AS ultimo_acesso_atividade,

IF((p.id = ".$pagina." AND mcs.section = ".$secao."), (SUM(l.time)), ('')) AS tempo_acesso_atividade,

lp.mtable AS instrumento, mcs.section

 

FROM mdl_log l

INNER JOIN mdl_course c ON (l.course = c.id)

INNER JOIN mdl_page p ON (p.course = l.course)

INNER JOIN mdl_course_sections mcs ON (mcs.course = l.course)

INNER JOIN mdl_log_display lp ON (l.cmid = lp.id)

 

WHERE l.userid = ".$user_id." AND l.course = ".$curso_id." AND mcs.section = ".$secao." AND p.id = ".$pagina." GROUP BY p.name, mcs.section ORDER BY mcs.section");

 

 

if($database->countRows($sql_periodos) == 0) {

echo "<i>Sem resultados.</i>";

exit();

}

 

$sql_periodos = $database->listAll($sql_periodos);

 

foreach($sql_periodos as $periodo){

//print "<pre>"; print_r($periodo);

//if($periodo['qtd_acesso_atividade'] > 0) {

echo "<div id='tab_celula' style='width: 205px;clear:both;'>".$periodo['nome_atividade']."</div>

<div id='tab_celula' style='width: 100px;'>".$periodo['instrumento']."</div>

<div id='tab_celula' style='width: 50px;'>".$periodo['qtd_acesso_atividade']."</div>

<div id='tab_celula' style='width: 95px;'>".toHours($periodo['tempo_acesso_atividade'])."</div>

<div id='tab_celula' style='width: 115px;'>".toDateHours($periodo['primeiro_acesso_atividade'])."</div>

<div id='tab_celula' style='width: 100px;border-right:none;'>".toDateHours($periodo['ultimo_acesso_atividade'])."</div>";

//}

}

 

}

}

 

echo "</div>";

 

 

o retorno fica algo do tipo:

 

 

MÓDULO 0

Página . 02 - Estudo de caso sobre Bullying

Instrumento . tag

Qtd Acessos . 225

Tempo de Acesso. 02:54:18

1° acesso . 20/03/2012 06:49:42

último acesso . 13/04/2012 22:50:47

 

01 - Reflexão

tag

225

02:54:18

20/03/2012 06:49:42

13/04/2012 22:50:47

 

03 - O que não é Bullying

tag

225

02:54:18 20/03/2012 06:49:42

13/04/2012 22:50:47

 

04 - Entrevista com o Prof. Edésio T. Miranda

tag

225

02:54:18

20/03/2012 06:49:42

13/04/2012 22:50:47

 

 

Ou seja, só vem certo o nome da página...o resto vem repetido

 

Agradeço desde já...

bjos galera

Compartilhar este post


Link para o post
Compartilhar em outros sites

esse tipo de construçao nao faz sentido...

 

 

Pq...

 

 

IF((p.id = ".$pagina." AND mcs.section = ".$secao."), (COUNT(l.cmid)),('')) AS qtd_acesso_atividade,

IF((p.id = ".$pagina." AND mcs.section = ".$secao."), (MIN(l.time)), ('')) AS primeiro_acesso_atividade,

IF((p.id = ".$pagina." AND mcs.section = ".$secao."), (MAX(l.time)), ('')) AS ultimo_acesso_atividade,

IF((p.id = ".$pagina." AND mcs.section = ".$secao."), (SUM(l.time)), ('')) AS tempo_acesso_atividade,

 

e

 

AND mcs.section = ".$secao." AND p.id = ".$pagina."

 

 

logo mcs.section é sempre igual a $secao e p.id é sempre igual a $pagina, nao havendo necessidade do if.

 

 

 

 

Mas qual exatamente seria o resultado correto esperado pela consulta?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa Noite 'giesta',

 

então, na verdade os ifs estão aí porque não estou sabendo montar a query mesmo.

O resultado esperado seria algo do tipo:

 

 

MÓDULO 0

Página . 02 - Estudo de caso sobre Bullying

Instrumento . tag

Qtd Acessos . 225

Tempo de Acesso. 02:54:18

1° acesso . 20/03/2012 06:49:42

último acesso . 13/04/2012 22:50:47

 

01 - Reflexão

page

10

03:42:11

20/03/2012 05:18:40

13/04/2012 08:54:29

 

03 - O que não é Bullying

folder

5

01:01:56

20/03/2012 22:30:02

13/04/2012 23:31:58

 

04 - Entrevista com o Prof. Edésio T. Miranda

forum

1

00:50:10

20/03/2012 23:10:40

13/04/2012 23:50:50

 

 

..ou seja, eu teria que trazer um resultado para cada página do módulo. Para cada "id" da página, ou título, como é exibido, preciso filtrar qual o instrumento utilizado (se foi pasta, url, tag, forum, etc), juntamente com a quantidade de acessos e o tempo de permanência do aluno em cada uma delas.

Acho que no exemplo que mostrei dá pra entender mais ou menos...é basicamente isso que eu preciso...

 

Tô uns 3 dias já nisso, se puder, me ajuda aí galera...não sei mesmo como montar o select, por favor...

Obrigada.

bjs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só vendo os dados pra poder te ajudar dado a quantidade de tabelas envolvidas, e também eu nao sei como os dados tao cadastrados, tipo, se repete ou nao o id numa tabela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.