Jump to content
Fórum Script Brasil
  • 0

Problemas com Table


rafaelduarte
 Share

Question

Olá amigos, gostaria de uma grande ajuda de vocês;
Sou estudante e iniciante de programação Web e estou com uma dúvida há dias, já pesquisei em vários fóruns, mas não consegui achar uma solução para o meu problema... Então resolvi pedir a ajuda de vocês com mais experiência que eu.

<table width="600" border="1" cellspacing="5" bgcolor="#FFFFFF">
        <tr align="center">
          <td width="400" align="center">Nome:</td>
          <!-- Repetição para aparecer todas as datas que contém frequência de uma determinada célula-->
         <?php do{?>
          <td align="center"><?php echo date('d/m/Y',strtotime($row_rs_datas_frequencia['data'])); ?></td>
          <?php }while($row_rs_datas_frequencia = mysql_fetch_assoc($rs_datas_frequencia))?>
          <td width="200" align="center">Total Presença Membros Mensal</td>
          <td width="200" align="center">Total Falta Membros Mensal</td>
        </tr>   
              <?php do{ ?>
        <tr align="center">       
        <!-- Imprimi a quantidade de alunos e as frequências -->
          <td width="400" align="center"><?php echo $row_rs_membros['nome']; ?></td>          
          <!-- **********************************************************************
          ****************************************************************************
          AQUI ESTÁ O PROBLEMA, NÃO ESTOU CONSEGUINDO FAZER APARECER A PRESENÇA DAS OUTRAS DATAS -->
		  <?php $countP=; $countF=;?> 
            <td align="center"> <?php if($row_rs_relatorio['presenca']>=1){ $countP++; echo "P"; }else{ $countF++; echo "F";} $row_rs_relatorio = mysql_fetch_array($rs_relatorio);?></td>     
          <td align="center"><?php echo $countP ?></td>
          <td align="center"><?php echo $countF ?></td>
        </tr>
			<?php }while($row_rs_membros = mysql_fetch_assoc($rs_membros)) ?>
        </table>

Resultado:

OBS: No meu banco já estou conseguindo preencher as frequências normalmente, agora estou no passo de gerar os relatórios das mesmas.


Resultado Esperado:

Meu objetivo era fazer um relatório mensal de frequência como este no Excel:

Meus Banco de Dados:

Ø  MEMBRO

·         Cod_membro

·         Nome

·         ... (informações em gerais)

·         Cod_celula

Ø  Célula

·         Cod_celula

·         Nome

Ø  Frequência

·         Cod_frequencia

·         Data

·         ...(Informações em gerais)

·         Cod_celula

Ø  Membro_Frequência

·         Cod_membro

·         Presença (0=F;1=P)

·         Cod_frequencia

 

(Tentei resumir a dúvida o máximo que pude, desculpe pelo tamanho do POST)

Consultas:

mysql_select_db($database_ChurchApp, $ChurchApp);
$query_rs_membros = sprintf("SELECT * FROM membro WHERE cod_celula = %s", GetSQLValueString($colname_rs_membros, "int"));
$rs_membros = mysql_query($query_rs_membros, $ChurchApp) or die(mysql_error());
$row_rs_membros = mysql_fetch_assoc($rs_membros);
$totalRows_rs_membros = mysql_num_rows($rs_membros);

mysql_select_db($database_ChurchApp, $ChurchApp);
$query_rs_relatorio = sprintf("SELECT membro.nome, frequencia.cod_frequencia, frequencia.data, membro_frequencia.presenca FROM membro,
 frequencia, membro_frequencia WHERE frequencia.cod_celula = %s AND membro.cod_membro = membro_frequencia.cod_membro AND
  MONTH(frequencia.data) = 05 AND membro_frequencia.cod_frequencia = frequencia.cod_frequencia",
 GetSQLValueString($colname_rs_relatorio, "int"));

$query_rs_datas_frequencia = sprintf("SELECT frequencia.data FROM frequencia WHERE cod_celula = %s and MONTH(frequencia.data) = 05",
 GetSQLValueString($colname_rs_datas_frequencia, "int"));

 

2.png

3.png

Edited by rafaelduarte
Link to comment
Share on other sites

8 answers to this question

Recommended Posts

  • 0

Oi Rafael!

Se o que você precisa é somar as presenças e ausências, partindo da idéia de que 'presenca' = 0 é ausência, acrescente na sua query de busca:

SUM(IF(presenca=1,1,0)) as presencas, SUM(IF(presenca=0,1,0)) as ausencias

Obs.: No trecho que você enviou não dá pra ver onde a variável $rs_relatorio foi criada;

Você está tentando usá-la em: mysql_fetch_array($rs_relatorio);

Link to comment
Share on other sites

  • 0

@wash Obrigado por responder!

Na verdade meu problema está em CRIAR/ARRUMAR a tabela para apresentar os dados salvos no banco de dados;

Segue o trecho onde está a variável $rs_relatório;

$colname_rs_relatorio = "-1";
if (isset($_GET['cod_celula'])) {
  $colname_rs_relatorio = $_GET['cod_celula'];
}
mysql_select_db($database_ChurchApp, $ChurchApp);
$query_rs_relatorio = sprintf("SELECT membro.nome, frequencia.cod_frequencia, frequencia.data, membro_frequencia.presenca FROM membro, frequencia, membro_frequencia WHERE frequencia.cod_celula = %s AND membro.cod_membro = membro_frequencia.cod_membro AND  MONTH(frequencia.data) = 05 AND membro_frequencia.cod_frequencia = frequencia.cod_frequencia", GetSQLValueString($colname_rs_relatorio, "int"));
$rs_relatorio = mysql_query($query_rs_relatorio, $ChurchApp) or die(mysql_error());
$row_rs_relatorio = mysql_fetch_assoc($rs_relatorio);

if (isset($_GET['totalRows_rs_relatorio'])) {
  $totalRows_rs_relatorio = $_GET['totalRows_rs_relatorio'];
} else {
  $all_rs_relatorio = mysql_query($query_rs_relatorio);
  $totalRows_rs_relatorio = mysql_num_rows($all_rs_relatorio);
}


Minha tabela tinha que ficar exatamente como está o exemplo via Excel;

Vou fazer uma consulta do banco de dados e postar aqui;

SELECT * FROM `membro_frequencia`

cod_membro presenca cod_frequencia  
1 1 1
5 1 1
11 1 1
120 1 1
125 1 1
131 1
1 1 2
5 1 2
11 1 2
120 2
125 2
131 2

... (E por ai vai)

 

O que não estou conseguindo fazer é aparacer essas presenças em formato de tabela;

Exemplo:
Nome - Data1 - Data2 - Data 3 ...
Fulano -   P    -     P     -    F 
Ciclano -  P    -     F      -    P
Beltrano- F    -      P     -    F

As soma é o próximo passo...

Link to comment
Share on other sites

  • 0

Ôppa! Creio que agora entendi!

Onde presenca = 1 você quer exibir a letra P, onde não for, você precisa exibir a letra F

Use um if na sua query assim: (IF(presenca=1,'P','F')) as presenca

 

Link to comment
Share on other sites

  • 0

Só lembrando que há muitos anos que o php.net recomenda que não se use as extensões mysql_* nunca mais!

mysql_.jpg

Se seu php ainda não está nem na versão 5, atualize!

Link to comment
Share on other sites

  • 0

@wash Essa parte eu consegui de boa;

Meu problema específico é imprimir as colunas respectivas as datas; Mesmo se eu fizer um laço de repetição ele apenas vai Replicar a 1ª coluna de valores;

        <!-- Imprimi a quantidade de alunos e as frequências -->
          <td width="400" align="center"><?php echo $row_rs_membros['nome']; ?></td>          
          <!-- **********************************************************************
          ****************************************************************************
          AQUI ESTÁ O PROBLEMA, NÃO ESTOU CONSEGUINDO FAZER APARECER A PRESENÇA DAS OUTRAS DATAS -->
		  <?php $countP=; $countF=;?> 
          
            <td align="center"> <?php if($row_rs_relatorio['presenca']>=1){ $countP++; echo "P"; }else{ $countF++; echo "F";} $row_rs_relatorio = mysql_fetch_array($rs_relatorio);?></td>     
            <td align="center"> <?php if($row_rs_relatorio['presenca']>=1){ $countP++; echo "P"; }else{ $countF++; echo "F";} $row_rs_relatorio = mysql_fetch_array($rs_relatorio);?></td>  
            <td align="center"> <?php if($row_rs_relatorio['presenca']>=1){ $countP++; echo "P"; }else{ $countF++; echo "F";} $row_rs_relatorio = mysql_fetch_array($rs_relatorio);?></td>
                         
          <td align="center"><?php echo $countP ?></td>
          <td align="center"><?php echo $countF ?></td>
        </tr>
			<?php }while($row_rs_membros = mysql_fetch_assoc($rs_membros)) ?>
        </table>

Olha como ficou agora:
Só que as outras datas estão apenas repetindo a primeira, teria que saber como eu faço para elas não repetirem e pegar as frequências das respectivas datas.

5.png

@lowys Puxa cara, não sabia disso. Vou me atentar para corrigir essa falha;

Você tem uma indicação do que usar para substituir a extensão Mysql_ (Site, apostilas, vídeo-aula etc.) ?
De qualquer forma, obrigado pela dica vou pesquisar mais sobre o assunto.

Link to comment
Share on other sites

  • 0

@wash Acredito ter conseguido a solução:

Contém com a ajuda de um amigo desenvolvedor web;

A lógica foi assim:

Uma nova consulta SQL a cada nova linha de Membros; A cada linha de Membros eu tenho um 'COD_MEMBRO', Então esse resultado eu uso para fazer a nova QUERY
Em nova SQL eu consultei as frequências de um único membro; e Mandei imprimir com o laço de repetição limitando na quantidade de DATAS (Colunas) disponíveis;

SELECT f.data, mf.presenca, mf.cod_membro FROM frequencia as f inner join membro_frequencia as mf on f.cod_frequencia = mf.cod_frequencia and mf.cod_membro = $VARIAVEL and MONTH(f.data) = 05
 
Resultado da Variavel -> COD_MEMBRO = 1
data presenca cod_membro  
2016-05-04 1 1
2016-05-03 1 1
2016-05-05 1 1

CÓDIGO:

      <table width="600" border="1" cellspacing="5" bgcolor="#FFFFFF">
        <tr align="center">
          <td width="400" align="center">Nome:</td>
         
          <!-- Repetição para aparecer todas as datas que contém frequência de uma determinada célula-->
          <!-- Imprimi a data na respectiva linha -->
         <?php do{?>
          <td align="center"><?php echo date('d/m/Y',strtotime($row_rs_datas_frequencia['data'])); ?></td>
          <?php }while($row_rs_datas_frequencia = mysql_fetch_assoc($rs_datas_frequencia))?>
          <td width="200" align="center">Total Presença Membros Mensal</td>
          <td width="200" align="center">Total Falta Membros Mensal</td>
        </tr>  
        <!-- Laço para as linhas da Tabela --> 
              <?php do{ ?>
        <tr align="center">       
        <!-- Imprimi o membro na respectiva linha -->
          <td width="400" align="center"><?php echo $row_rs_membros['nome']?></td>
          
		  <?php $countP=; $countF=; $count=;?> 
          
          <?php
		  mysql_select_db($database_ChurchApp, $ChurchApp);
$query_rs_linha_membro = sprintf("SELECT f.data, mf.presenca, mf.cod_membro FROM frequencia as f inner join membro_frequencia as mf on f.cod_frequencia = mf.cod_frequencia and mf.cod_membro = %s and MONTH(f.data) = 05", GetSQLValueString($row_rs_membros['cod_membro'], "int"));
$rs_linha_membro = mysql_query($query_rs_linha_membro, $ChurchApp) or die(mysql_error());
$row_rs_linha_membro = mysql_fetch_assoc($rs_linha_membro);
$totalRows_rs_linha_membro = mysql_num_rows($rs_linha_membro);  
		   ?>
           
           <!-- Imprimi a presença do membro na respectiva linha, com Base na consulta feito a partir do COD_MEMBRO (do laço de repetição) -->
           <?php do{?>
            <td align="center"> <?php //echo "CodMembro:".$row_rs_linha_membro['cod_membro']." Data:".$row_rs_linha_membro['data']." Presen:"; ?>
			<?php if($row_rs_linha_membro['presenca']>=1){ $countP++; echo "P"; }else{ $countF++; echo "F";} ?></td>          
        <?php $row_rs_linha_membro = mysql_fetch_assoc($rs_linha_membro); ?>
        
        <!-- Imprimi a presença do membro na respectiva linha, com o limite de DATAS disponíveis -->
		   <?php $count++; }while($count<$totalRows_rs_datas_frequencia)?>  
               
          <td align="center"><?php echo $countP ?></td>
          <td align="center"><?php echo $countF ?></td>
        </tr>
        <!-- (Repetição) Voltar a imprimir as linhas enquanto tiver membros -->
			<?php }while($row_rs_membros = mysql_fetch_assoc($rs_membros)) ?>
        </table>

Resultado Tabela em Anexo:
 

Desculpem, esqueci de anexar as imagens do resultado;

6.png

7.png

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      149.9k
    • Total Posts
      646.8k
×
×
  • Create New...