Ir para conteúdo
andersongvminas

Puxar lista de presença na horizontal e vertical

Recommended Posts

Olá Pessoal,

 

Como faço para puxar do banco de dados a presença de cada aluno na horizontal e vertical conforme cada aluno, como mostra a imagens abaixo:

diario.jpg

Código:

<table>
 <tr>
  	<?
	$re_3 = mysql_query("SELECT * FROM tb_chamadas_gv INNER JOIN tb_alunos_gv ON tb_alunos_gv.id = tb_chamadas_gv.id_aluno 
	WHERE id_disciplina like'%$id_disciplina%' GROUP BY id_aluno ORDER BY tb_alunos_gv.nome");
	while ($rs_3 = mysql_fetch_array($re_3)){
    ?>
    <td width="12"><input type="text" value="<? echo $rs_3['id']; ?>" size="2" /></td>
    <td width="423"><div style="width:400px;"><? echo $rs_3['nome']; ?></div></td>
    
	<?
	$re_4 = mysql_query("SELECT * FROM tb_alunos_gv INNER JOIN tb_chamadas_gv ON tb_chamadas_gv.id_aluno = tb_alunos_gv.id");
 	$count = mysql_num_rows($re_4);
	while($rs_4 = mysql_fetch_array($re_4)){
	?>   
    <td> 

    <div style="width:15px;"><input name="freq[]" type="checkbox" value="SIM" <?php echo $rs_4["freq"] == "SIM" ? "checked=\"checked\"" : ""; ?> /></div>
    <? } ?>
    </td>
    
  </tr>
<? }?> 
</table>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estou querendo puxar do banco de dado as presença dos alunos lançados, em um checkbox na horizontal

 

exemplo:

DIA 1 - DIA 2 - DIA 3 - DIA 4 .......................

 

João ---------------- SIM - NÃO - SIM - SIM

Maria ---------------- SIM - SIM - SIM - NÃO

 

Banco de Dados

 

Tabela Aluno

Id

Nome

 

Tabela Chamada

Id

Id_aluno

data

presença

 

Quando utilizo o comando abaixo: os campos checkbox já vem marcado e não esta identificando o id do aluno com id da frequencia - para exibir na horizontal.

<table>
 <tr>
  	<?
	$re_3 = mysql_query("SELECT * FROM tb_chamadas_gv INNER JOIN tb_alunos_gv ON tb_alunos_gv.id = tb_chamadas_gv.id_aluno 
	WHERE id_disciplina like'%$id_disciplina%' GROUP BY id_aluno ORDER BY tb_alunos_gv.nome");
	while ($rs_3 = mysql_fetch_array($re_3)){
    ?>
    <td width="12"><input type="text" value="<? echo $rs_3['id']; ?>" size="2" /></td>
    <td width="423"><div style="width:400px;"><? echo $rs_3['nome']; ?></div></td>
    
	<?
	$re_4 = mysql_query("SELECT * FROM tb_alunos_gv INNER JOIN tb_chamadas_gv ON tb_chamadas_gv.id_aluno = tb_alunos_gv.id");
 	$count = mysql_num_rows($re_4);
	while($rs_4 = mysql_fetch_array($re_4)){
	?>   
    <td> 

    <div style="width:15px;"><input name="freq[]" type="checkbox" value="SIM" <?php echo $rs_4["freq"] == "SIM" ? "checked=\"checked\"" : ""; ?> /></div>
    <? } ?>
    </td>
    
  </tr>
<? }?> 
</table>

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que eu faria:

  1. criaria uma tabela-calendário, como esta: http://www.hufersil.com.br/post/recorrencia-de-datas-com-mysql;
  2. colocaria os dados da chamada da semana em uma TEMP;
  3. Montaria a query dinamicamente para trazer os dados que preciso;

Exemplos:

CREATE TABLE calendario (
	`data` DATE NOT NULL,
	dia_semana INT NOT NULL,
	semana_ano INT NOT NULL,
	PRIMARY KEY(`data`)
) ENGINE=MyISAM;


CREATE TABLE numero (
	id INT NOT NULL AUTO_INCREMENT, 
	PRIMARY KEY(id)
) ENGINE=MyISAM;
 
INSERT INTO NUMERO VALUES(NULL);
INSERT INTO NUMERO SELECT NULL FROM NUMERO; 
INSERT INTO NUMERO SELECT NULL FROM NUMERO; 
INSERT INTO NUMERO SELECT NULL FROM NUMERO; 
INSERT INTO NUMERO SELECT NULL FROM NUMERO; 
INSERT INTO NUMERO SELECT NULL FROM NUMERO; 
INSERT INTO NUMERO SELECT NULL FROM NUMERO; 
INSERT INTO NUMERO SELECT NULL FROM NUMERO; 
INSERT INTO NUMERO SELECT NULL FROM NUMERO; 
INSERT INTO NUMERO SELECT NULL FROM NUMERO; 
INSERT INTO NUMERO SELECT NULL FROM NUMERO; 
INSERT INTO NUMERO SELECT NULL FROM NUMERO; 
INSERT INTO NUMERO SELECT NULL FROM NUMERO; 
INSERT INTO NUMERO SELECT NULL FROM NUMERO; 
INSERT INTO NUMERO SELECT NULL FROM NUMERO; 



INSERT INTO calendario 
SELECT
	DATE_ADD('2015-01-01', INTERVAL id-1 DAY),
	DAYOFWEEK(DATE_ADD('2015-01-01', INTERVAL id-1 DAY))-1,
	WEEKOFYEAR(DATE_ADD('2015-01-01', INTERVAL id-1 DAY))
FROM numero;

CREATE TABLE `aluno` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nome` varchar(200) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  AUTO_INCREMENT=1;


CREATE TABLE `chamada` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_aluno` int(11) NOT NULL,
  `data_chamada` date NOT NULL,
  `presente` tinyint(1) DEFAULT '1',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 ;


INSERT INTO `aluno`(`id`, `nome`) VALUES (null, 'Joao');
INSERT INTO `aluno`(`id`, `nome`) VALUES (null, 'Maria');
INSERT INTO `aluno`(`id`, `nome`) VALUES (null, 'Pedro');

PHP


# conexao MySQL
$db = new PDO('mysql:dbname=testes;host=localhost','root','root');

# formato de datas
$formato = 'Y-m-d';

# inicio e fim da semana
# pode ser alterado para os periodos desejados
$inicio = new DateTime('monday this week');
$fim = new DateTime('friday this week');

# consulta os dias no calendario
$sql = sprintf("select * from calendario where data between '%s' and '%s'", $inicio->format($formato), $fim->format($formato));
$stDiasSemana = $db->query($sql) or die('zicou');

# cria uma tabela temporaria com os dados da chamada
$sql = sprintf("create temporary table tmp_chamada as select * from chamada where data_chamada between '%s' and '%s'", $inicio->format($formato), $fim->format($formato));
$db->query($sql) or die('zicou');


# uma string auxiliar para montar os dias da chamada
$subDiasChamada = '';

foreach($stDiasSemana->fetchAll(PDO::FETCH_ASSOC) as $row) {
	$subDiasChamada .= sprintf(
		"SUM(IF(t.data_chamada = '%s' AND t.presente, 1, 0)) as dia_%s,\n",
		$row['data'],
		str_replace('-','_',$row['data'])
	);
}

$subDiasChamada = trim(trim($subDiasChamada),',');

# cria consulta
$sql = "
	SELECT aluno.id,
	       nome,
		   {$subDiasChamada}
	  FROM aluno
 LEFT JOIN tmp_chamada t ON t.id_aluno = aluno.id
  GROUP BY aluno.id 
";

# daqui pra frente é com você

Resultado no PHP My Admin:

 

Captura_de_Tela_2015_10_01_a_s_16_54_58.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 01/10/2015 at 16:55, hufersil disse:

Bom dia Hugo Silva, gostaria de uma ajuda sua, como faço para entrar em contato com você? Tentei entrar no seu site mas ele nao está funcionando.

Desculpem se estou postando essa mensagem no lugar errado, mas não encontrei o lugar que poderia postar.

Editado por marcos_pfa
Não digitei o texto, enviei antes.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

×

Informação importante

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