Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Tudo bem pessoal?
Estou desenvolvendo um sistema onde precisarei pontuar o usuário que preencher todos os dados do seu cadastro ou seja o usuário que completar o preenchimento completa da sua tabela no banco. Minha dúvida é se existe alguma função no mysql que conte os campos vazios ou tenho que criar algo no PHP? Para fazer a matemática dos campos.
Supondo que tenho 10 campos e o peso de cada campo é um.
Desde já obrigado.
Outra maneira (mais elegante)
<?php
//$registros seria a variavel do banco SELECT * FROM ...
$registros = array(
array(
'id' => 1
,'nome' => 'Luigi'
,'nr' => '10'
)
,array(
'id' => 2
,'nome' => ''
,'nr' => '10'
)
,array(
'id' => 3
,'nome' => ''
,'nr' => ''
)
,array(
'id' => 4
,'nome' => 'Super Mario'
,'nr' => '8000'
)
);
$totalRegistros = count($registros[0]) - 1; // Retira o id xD
array_walk($registros,function(&$registro) use($totalRegistros){
$loopPreenchido = 0;
foreach($registro as $key => $val){
if($val != '' && $key != 'id'){
$loopPreenchido++;
}
}
$registro['total_prenchido'] = ($loopPreenchido / $totalRegistros) * 100 . '%';
});
var_dump($registros);
/*
array (size=4)
0 =>
array (size=4)
'id' => int 1
'nome' => string 'Luigi' (length=5)
'nr' => string '10' (length=2)
'total_prenchido' => string '100%' (length=4)
1 =>
array (size=4)
'id' => int 2
'nome' => string '' (length=0)
'nr' => string '10' (length=2)
'total_prenchido' => string '50%' (length=3)
2 =>
array (size=4)
'id' => int 3
'nome' => string '' (length=0)
'nr' => string '' (length=0)
'total_prenchido' => string '0%' (length=2)
3 =>
array (size=4)
'id' => int 4
'nome' => string 'Super Mario' (length=11)
'nr' => string '8000' (length=4)
'total_prenchido' => string '100%' (length=4)
*/>
3 horas atrás, Helison Santos disse:
Minha dúvida é se existe alguma função no mysql que conte os campos vazios
Use SUM + Subselect para checar os campos que estiverem null, para isso o padrao do campo tem que ser NULL.
acho que dá pra fazer pegando os indices dos campos também algo tipo
$sql = "SELECT * FROM tabela WHERE id='$id'";
$row = mysql_fetch_array($sql);
$tot = mysql_num_rows($sql);
$pre = 0;
while($i < $tot){
if($row[$i] != '' && $row[$i] != null){
$pre++;
}
}
echo $pre - 1;
usei como mysql porque muita gente ainda tá vindo com ele mas espero que já esteja no mysqli ou pdo e aí é só alterar aí.
botei **$pre - 1** no final porque se imagina que o campo id tá preenchido e então ele não faz parte da coisa toda.
Fazer pelo SQL acho meio embaçado.
Pelo php seria mamãozinho hehe
Uma das varias formas possíveis de fazer:
$registros = array( array(/*
Teria a saida:
1 tem 2 campos
2 tem 1 campos
3 tem 0 campos
4 tem 2 campos
*/