Ir para conteúdo

POWERED BY:

Arquivado

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

ASVSWEB

Foreach com consulta em banco de dados

Recommended Posts

Olá pessoal,estou precisando de uma ajudinha.é o seguinte eu tenho um banco de dados no qual armazeno dias e horarios, Ex: 1;3 que são os dias e 8:00;9:00 que são as horas.

Eu estava precisando fazer uma consulta no banco para trazer os dias com seus respectivos horarios,no caso

 

1(segunda)--- 8:00

3(quarta) --- 9:00

 

Eu estou tentando com o foreach usando o explode mas so consigo pegar o dia,o horário não está pegando certo.como vou fazer usando o foreach?.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mais fácil definir o tipo de campo certo no banco

 

`inicio` DATETIME,
`fim` DATETIME

Também fica muito mais fácil para buscar por intervalos posteriormente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mais fácil definir o tipo de campo certo no banco

 

`inicio` DATETIME,
`fim` DATETIME

Também fica muito mais fácil para buscar por intervalos posteriormente.

 

você poderia dar um outro exemplo para ficar mais claro?obr.

Compartilhar este post


Link para o post
Compartilhar em outros sites

você poderia dar um outro exemplo para ficar mais claro?obr.

 

Certamente.

 

Vamos montar uma agenda, ok?

 

CREATE TABLE `agenda`(
   id        smallint(2) primary key auto_increment,
   descr     varchar(20),
   inicio    datetime,
   fim       datetime
);

 

Agora vamos inserir alguns compromissos:

INSERT INTO `agenda`(`descr`,`inicio`,`fim`) values
('dentista', '2010-07-05 11:00:00', '2010-07-05 12:00:00'),
('almoço', '2010-07-05 12:15:00', '2010-07-05 12:50:00'),
('estudar', '2010-07-05 13:00:00', '2010-07-05 16:00:00'),
('futebol', '2010-07-05 16:30:00', '2010-07-05 19:00:00')
...

 

Agora vamos buscar todas as atividades de hoje compreendidas entre 12:30 e 15:00

 

SELECT `descr` AS `atividade` WHERE
   `inicio` (BETWEEN '2010-07-05 12:30:00' AND '2010-07-05 15:00:00') AND
   `fim` (BETWEEN '2010-07-05 12:30:00' AND '2010-07-05 15:00:00');

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é cara ,eu acho que você não entendeu o que eu quero,mas também expliquei mal né.vou enviar o codigo para ficar mais facil de entender.

<?php
while($linha = mysql_fetch_array($query)){
	$numAlunos = $linha['Numero de alunos'];
	$vg 	 = $linha['vagas'];
	$dias 	 = $linha['dias'];
	$horarios = $linha['horarios'];
	$idTurma = $linha['idTurma'];

	

	$dias = explode(";",$dias);

	$horarios = explode(";",$horarios);
	
	
	

	$arrayPosicao = array_keys($horarios);
	  	foreach($arrayPosicao as $id2 =>$idValor){
			$recebe = $idValor;
			$posicaoDia = $recebe; 
			$pd = $posicaoDia;
			$horarioDia = $horarios[$pd];
			
           
			
		}
		foreach($dias as $id=>$idItem){
		
			if($idItem == '1'){
				$diaSemana = "Segunda";
	
		
				
			}else if($idItem == '2'){
				$diaSemana = "Terça";

			}
			else if($idItem == '3'){
				$diaSemana = "Quarta";
			}
			else if($idItem == '4'){
				$diaSemana = "Quinta";
			}
			else if($idItem == '5'){
				$diaSemana = "Sexta";
			} 	
	
				
			echo "<tr><td align='center' height='20'>".$linha['nomeProjeto'];"</td>";
			echo "<td align='center' height='20'>".$linha['nomeTurma'];"</td>";
			echo "<td align='center' height='20'>".$diaSemana."</td>";
			echo "<td align='center' height='20'>".$horarioDia."</td>";
		        echo "<td align='center' height='20'>".$numAlunos."</td></tr>";
			
		}
os dias estão gravados no banco como 1;3 que são segunda e quarta,por isso tenho esse idItem

os horários estão nomais 8:00 para segunda e 9:00 para Quarta.Então tenho que pegar o dia com seu horário certo,é o que não consigo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu entendi perfeitamente o que você precisa e respondi que seu banco está modelado incorretamente, por isso a dificuldade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu entendi perfeitamente o que você precisa e respondi que seu banco está modelado incorretamente, por isso a dificuldade.

 

Como deveria fazer?tem uma sugestão?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cada dia/hora deve ser um registro em separado, a menos que seja um intervalo, que deverá ser como foi mostrado anteriormente.

 

Para campos apenas Hora, pode definí-los como TIME e não DATETIME.

 

id [int] | numAlunos [int] | vagas [int] | dia [enum(1,2,3,4,5)] | hora [TIME] | idTurma [int]

SELECT `numAlunos` AS `Número de Alunos`, `vagas` AS `Vagas`,  `idTurma` AS `Turma`, `dia` AS `Dia`, `hora` AS `Hora` FROM `vagas`

 

<?php

$stmt = mysqli->query($sql);
$row = $stmt->fetch();

echo '<table>
   <thead>
       <tr>' . PHP_EOL;

foreach(array_keys($row) as $field) echo '            <th>'. $field . '</th>' . PHP_EOL;

echo '        </tr>
   </thead>
   <tfoot>
       <tr>' . PHP_EOL;

foreach(array_keys($row) as $field) echo '            <th>'. $field . '</th>' . PHP_EOL;

echo '        </tr>
   </tfoot>
   <tbody>' . PHP_EOL;

do {
   echo '        <tr>' . PHP_EOL;
   foreach($row as $data) echo '            <td>'. $data .'</td>' . PHP_EOL;
   echo '        </tr>'. PHP_EOL;
} while(NULL !== ($row = $stmt->fetch()));

echo '    </tbody>
</table>';

Compartilhar este post


Link para o post
Compartilhar em outros sites

Meu banco de dados está assim;

 

Turma

idTurma

nomeTurma

dias --- 1,3

horarios --- 8:00,9:00

vagas

idProjeto

 

Se eu entendi eu tenho que fazer uma outra tabela para dias e horarios?

Eu confesso que estou tendo dificudades para modelar corretamente esse banco.

Só explicando é o seguinte o meu sistema é um sistema de cadastro de alunos em projetos(Informática,Teatro e etc).Então cada aluno pode estar matriculado em um ou mais projetos que possuem uma ou mais turmas,que podem estar em mais de um dia e horário.Acho que deu pra dar uma clareada.sei que aqui não é o forum de modelagem se você puder me dar uma dicas eu agradeço.obr pela atenção

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só explicando é o seguinte o meu sistema é um sistema de cadastro de alunos em projetos(Informática,Teatro e etc).Então cada aluno pode estar matriculado em um ou mais projetos que possuem uma ou mais turmas,que podem estar em mais de um dia e horário.

aluno, projeto, turma, dia, horário.

 

CREATE TABLE `alunos` (
   `id`            SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
   `nome`          VARCHAR(40) UNIQUE NOT NULL,
   `nasc`          DATE,
   `sexo`          BOOLEAN,
   `cep`           INT(8) ZEROFILL UNSIGNED NOT NULL,
   `numero`        SMALLINT UNSIGNED,
   `responsavel`   VARCHAR(40) NOT NULL,
   `telefone`      BIGINT UNSIGNED
) ENGINE = INNODB;

 

CREATE TABLE `projetos` (
   `id`            SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
   `nome`          VARCHAR(10) UNIQUE NOT NULL
) ENGINE = INNODB;

 

CREATE TABLE `turmas` (
   `id`            SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
   `projetoId`     SMALLINT UNSIGNED,
   `dia`           ENUM(1,2,3,4,5) NOT NULL,
   `hora`          TIME NOT NULL,
   `vagas`         SMALLINT UNSIGNED NOT NULL,
   INDEX (`projetoId`),
   FOREIGN KEY (`projetoId`) REFERENCES `projetos`(`id`) ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE = INNODB;

 

CREATE TABLE `matriculas` (
   `id`            SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
   `idAluno`       SMALLINT UNSIGNED NOT NULL,
   `idTurma`       SMALLINT UNSIGNED NOT NULL,
   INDEX (`idAluno`),
   INDEX (`idTurma`),
   FOREIGN KEY (`idAluno`) REFERENCES `alunos`(`id`) ON UPDATE CASCADE ON DELETE CASCADE,
   FOREIGN KEY (`idTurma`) REFERENCES `turmas`(`id`) ON UPDATE CASCADE ON DELETE CASCADE
) ENGINE = INNODB;

 

CREATE TRIGGER `vagas` BEFORE INSERT ON `matriculas`
   FOR EACH ROW UPDATE `turmas` SET `vagas` -= `vagas` WHERE `turmas`.`id` = NEW.`idTurma`;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu tenho essa imagem que mostra a parte de cadastramento de turma.Nela possui os checkboxs para escolher os dias de aula da turma,o horario,o projeto no qual a turma ira ser inserida e o numero de vagas.Eu estava passando para o banco usando implode,sendo assim os dias eram passados como no modelo ja falado 1;3 e os horários 8:00;9:00,armazena eu consigo o problema e trazelos com dia e hora certo.

vai nesse link para ver a img ai.

Imagem Postada

 

valeu até agora cara!brigadão.

Compartilhar este post


Link para o post
Compartilhar em outros sites

CREATE TRIGGER `vagas` BEFORE INSERT ON `matriculas`
FOR EACH ROW UPDATE `turmas` SET `vagas` -= `vagas` WHERE `turmas`.`id` = NEW.`idTurma`;

 

triggers de um modo simples, são funções ou procedures que são executadas quando certa ação ocorrer, no caso da trigger acima ela é executada quando for inserido alguma linha na tabela de matriculas

 

toda matricula que ocorrer ela já diminui o contador das vagas na tabela de vagas pra respectiva turma que foi matriculada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não entendi o campo enum,porque ele é fixo e no caso o usuário vai escolher as opções que iram ser inseridas

na tabela da turma no campo dias.

 

È vou tentar sozinho mesmo.

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.