Ir para conteúdo

Arquivado

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

msmarins

SELECT com dados controlados

Recommended Posts

Olá a todos!

Tenho um formulario que a pessoa deve selecionar (select) o um horário especifico agendando um visita. As informações deste formulario vão para um banco e quando aquele horário for escolhido 6 vezes ele deve ficar indisponível.

Eu fiz um tremenda ganbearra para funcionar mas tenho quase certeza que vai almentar o tráfego devido as várias querys e deve ter uma menaira mais simples.

Criei um query para cada option do select e determinei duas classes para cada um. Então eu conto a quatidade de horário marcados e se forem igual a 6 eu mudo a classe para uma com o Style display:none;

 

Está assim no mesmo documento.

<?php
$contagem = "SELECT * FROM matricula WHERE horario_cand1 = '8h às 8h30' ";
$contando = mysql_query ($contagem);
$total = mysql_num_rows($contando);
$hor1 = "h_aceso";
if ($total >= 6 ){$hor1="h_apagado";}

$contagem = "SELECT * FROM matricula WHERE horario_cand1 = '8h30 às 9h' ";
$contando = mysql_query ($contagem);
$total = mysql_num_rows($contando);
$hor2 = "h_aceso";
if ($total >= 6){$hor2="h_apagado";}

$contagem = "SELECT * FROM matricula WHERE horario_cand1 = '9h às 9h30' ";
$contando = mysql_query ($contagem);
$total = mysql_num_rows($contando);
$hor3 = "h_aceso";
if ($total >= 6){$hor3="h_apagado";}

$contagem = "SELECT * FROM matricula WHERE horario_cand1 = '10 às 10h30' ";
$contando = mysql_query ($contagem);
$total = mysql_num_rows($contando);
$hor4 = "h_aceso";
if ($total >= 6){$hor4="h_apagado";}

$contagem = "SELECT * FROM matricula WHERE horario_cand1 = '10h30 às 11h' ";
$contando = mysql_query ($contagem);
$total = mysql_num_rows($contando);
$hor5 = "h_aceso";
if ($total >= 6){$hor5="h_apagado";}

$contagem = "SELECT * FROM matricula WHERE horario_cand1 = '11h às 11h30' ";
$contando = mysql_query ($contagem);
$total = mysql_num_rows($contando);
$hor6 = "h_aceso";
if ($total >= 6){$hor6="h_apagado";}

$contagem = "SELECT * FROM matricula WHERE horario_cand1 = '11h30 às 12h' ";
$contando = mysql_query ($contagem);
$total = mysql_num_rows($contando);
$hor7 = "h_aceso";
if ($total >= 6){$hor7="h_apagado";}
?>
<select id="horario_cand1" class="" name="horario_cand1"  tabindex="">
<option value=""></option>
<option class="<?php echo $hor1;?>" value="8h às 8h30">8h às 8h30</option>
<option class="<?php echo $hor2;?>" value="8h30 às 9h">8h30 às 9h</option>
<option class="<?php echo $hor3;?>" value="9h às 9h30">9h às 9h30</option>
<option class="<?php echo $hor4;?>" value="10 às 10h30">10 às 10h30</option>
<option class="<?php echo $hor5;?>" value="10h30 às 11h">10h30 às 11h</option>
<option class="<?php echo $hor6;?>" value="11h às 11h30">11h às 11h30</option>
<option class="<?php echo $hor7;?>" value="11h30 às 12h">11h30 às 12h</option>
</select>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça uma só consulta contando os registros (count) agrupado pelos horários (horario_cand1).

 

Assim você terá o resultado parecido com isso:

 

count horario_cand1

5 8h às 8h30

2 8h30 às 9h

8 9h às 9h30

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é Willian, eu tentei assim e até consegui agrupar os valores, Mas eu não soube com separa-los do array e fazer a a condição.

Não tenho muita habilidade!

Tinha feitos assim e coloquei um echo para testar... mas "empaquei"

<?php
$contagem = "SELECT distinct horario_cand1, COUNT(*) AS total FROM matricula GROUP BY horario_cand1 ORDER BY total desc";

$contando = mysql_query ($contagem);
$total = mysql_num_rows($contando);
echo $total;

while ( $count = mysql_fetch_array($contando)){
$teste =  $count[1];
$teste2=  $count[0];

echo $total;



}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você terá que percorrer o resultado do select no while.

 

while ( $count = mysql_fetch_array($contando)){
echo "Hora: " . $count[0] . "<br/>";
echo "Total: " . $count[1];
}

 

Assim você verá os resultados linha por linha.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu entedi, mas como vou separar os recultados agrupados para colocar a condição que não permita que tenha mais de 6 escolhas naquele horário?

 

O problema é que eu só posso permitir 6 marcações em um horário.

Eu preciso criar uma condiçção a partir dos resultados em que o Cont retornar 6 (em uma posição do array) eu tenho que apagar aquele horário.

Não sei se consegui explicar!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na execução do while você poder colocar os resultados em um array para poder verificar quando está montando os <option>

 

while ( $count = mysql_fetch_array($contando)){
$res[$count[0]] = $count[1];

}

 

Tendo esse array é só acessar o item que deseja e verificar se é maior que 6.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Brother, desculpe .... eu fis isso aqui.

			<select id="horario_cand1" class="" name="horario_cand1"  tabindex="">
			<option value=""></option>
			<?php
			$contagem = "SELECT distinct horario_cand1, COUNT(*) AS total FROM matricula GROUP BY horario_cand1 ORDER BY total desc";
			$contando = mysql_query ($contagem);
			$total = mysql_num_rows($contando);
			while ( $count = mysql_fetch_array($contando)){
			$teste =  $count[1];
			$teste2=  $count[0];
			?>
			<option  value="<?php echo $teste2;?>"><?php echo $teste2;?></option>
			<?php 
			} 
			?>
		</select>

Confesso que viajei no que você falou!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara é o seguinte eu tinha falado de fazer com um array.

 

Mas do jeito que você está fazendo é colocando na variável $teste o total e na variável $teste2 a hora.

 

Ai quando você vai montar o <option> você tem que colocar um if verificando se $teste é >= 6 caso for colocar a class h_apagado e caso contrário h_aceso

 

<option class="<?php if($teste >=6) { echo "h_apagado"; } else { echo "h_aceso"; } ?>" value="<?php echo $teste2; ?>"><?php echo $teste2; ?></option>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caramba cara Perfeito. Funcinou exatamente como você falou.

Aí descobri outro problema... se não houverem pelo menos 7 registros a consulta vai voltar vazia o com menos horários.

Que coisa ehm.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caso não tenha registro de algum horário você não terá ele no while e com o script dessa forma ficará faltando os horários que não tem nenhum registro.

 

Você terá que pensar em uma forma de detectar isso, quando coloquei a sugestão com array você poderia verificar se no array tem o índice de cada horário assim mesmo que o select não o traga você saberia com essa verificação.

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.