Ir para conteúdo

POWERED BY:

Arquivado

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

My name is Jan Lucas

[Resolvido] Contar Valores num array

Recommended Posts

Seguinte galerina. Minha dúvida é que eu tenho chamados com datas numa tabela do mysql no formato 0000-00-00.

Só que preciso saber chamados teve em todos os meses.

 

tenho o seguinte código

 

$meses = array(01=>"Janeiro",02=>"Fevereiro",03=>"Março",04=>"Abril",05=>"Maio",06=>"Junho",
07=>"Julho",08=>"Agosto",09=>"Setembro",10=>"Outubro",11=>"Novembro",12=>"Dezembro");

$mes = array(); //array que armazena os meses existentes na tabela de chamados. Depois é só contar os valores iguais com a função "array_count_values($array)"

$query = mysql_query("SELECT data FROM helps");

while($result = mysql_fetch_assoc($query)){

$data = $result['data'];
$mes = $meses[substr($data,5,2)];//armazena no array $mes a string correspondente a quebra da data contida em $data. O Nome do mes no caso.
}
print_r(array_count_values($mes));

 

O este código deve fazer é contar Os nomes de meses iguais e imprimir na tela a quantidade.

Mas ele dá um erro: Warning: array_count_values() expects parameter 1 to be array, string given.

 

Gostaria de exibir

 

Mes Qtd.Chamados

Janeiro 60

Fevereiro 220

Março 0

Abril 0

Maio x

Junho y

Julho z

 

eh isso que eu gostaria de fazer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

contar Os nomes de meses iguais e imprimir na tela a quantidade

SELECT SUM(`campo`) FROM `tabela` WHERE MONTH(`data`)=$mes
Isso soma os valores. Se você quiser apenas contar o número de registros, pode fazer assim:

 

SELECT COUNT(`campo`) FROM `tabela` WHERE MONTH(`data`)=$mes

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

$meses = array(01=>"Janeiro",02=>"Fevereiro",03=>"Março",04=>"Abril",05=>"Maio",06=>"Junho",07=>"Julho",08=>"Agosto",09=>"Setembro",10=>"Outubro",11=>"Novembro",12=>"Dezembro");

$qnt = array(); // Vai armazenar as contagens de ocorrencias de meses iguais.
for ($i=1; $i<=12; $i++){ 
$x = key($meses[$i]); // aqui eu pego a chave dos elementos do array. Ele dá erro nessa linha. 

$query = mysql_query("SELECT COUNT(data) FROM helps WHERE MONTH(data) = $meses[$x] as quant"); //Eu uso a chave que eu peguei logo acima pra poder compaar com o mes que está no banco no formato -00-.

$result = mysql_fetch_assoc($query); // mesmo se não tiver o erro da chave do array. Acontece um erro aki dizendo que mysql_fetch_assoc(), precisa de um valor booleano e não o recebe.

$qnt = ($result['quant']);
} 
$i = 1;
while ($i<=12){
print " 
<tr> 
<td>$meses[$i]</td> 
<td>$qnt[$i]</td></td>
";
}

 

Da pra entender o código néah! ?

Abraço! tentem ajudar ae favor.

 

Tipo No Erro que dá na função key() e na consulta feita que deve ter erro pra não retornar um valor booleano.

 

vlw galeriinhaa!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo Jan, se você quer fazer uma query por todos os meses não seria mais fácil fazer assim?

 

$meses = array('01','02','03','04','05','06','07','08','09','10','11','12');
$query = mysql_query('SELECT COUNT(data) FROM helps WHERE MONTH(data) IN("'.implode('","',$meses).'")';
Ou ainda se preferir o jeito antigo:

 

$meses = array('01'=>'Janeiro','02'=>'Fevereiro','03'=>'Março','04'=>'Abril','05'=>'Maio','06'=>'Junho','07'=>'Julho','08'=>'Agosto','09'=>'Setembro',10=>'Outubro',11=>'Novembro',12=>'Dezembro');
$keys = array_keys($meses);
$query = mysql_query('SELECT COUNT(data) FROM helps WHERE MONTH(data) IN("'.implode('","',$keys).'")';
Desta forma você nem precisa que o código acima esteja dentro de um loop.

Pode fazer o loop apenas para jogar as informações que quer exibir em um array.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

$meses = array('01','02','03','04','05','06','07','08','09','10','11','12');
$query = mysql_query('SELECT COUNT(data) FROM helps WHERE MONTH(data) IN("'.implode('","',$meses).'")';

Variação otimizada

SELECT count(`campo`) as `qtd`, month(`campo`) as `mês` FROM `tabela` GROUP BY `mês`;

 

Lembrando que não é recomendável chamar um campo da tabela de 'DATA';

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lembrando que não é recomendável chamar um campo da tabela de 'DATA';

Desculpe, mas fiquei curioso... pq não? Se o uso de aspas for correto, não terá problemas, sempre acreditei.

Não estou falando isso pra provocar como muitos fazem por aqui, mas realmente fiquei com dúvida nisso.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Há sempre que se pensar em medidas colaborativas. Nem sempre trabalharemos sozinhos ou seremos mantenedores do sistema eternamente, passando a responsabilidade adiante.

 

Não é todo mundo que tem costume de envolver nomes de bancos, tabelas e campos em SPECIAL_QUOTES nosso conhecido acento grave `, o que seria uma boa prática em consultas sql.

 

Se eu fizer a busca por um campo chamado data, sem envolvê-lo em delimitadores de strings, estarei utilizando uma palavra reservada/função do banco de dados, gerando um erro de consulta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Basicamente o que o amigo Evandro quis dizer é:

 

Imagine você construir uma função no PHP chamada str_replace ....

 

Partindo do principio que a idéia no MySQL é a mesma, já deu pra ver

a confusão que pode dar né? ^_^

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

AAAAaah! Entendi o motvivo de não usar o nome com data. Vlw deu pra entender isso ai.

 

Uma pergunta. O que significa aquele

IN("'.implode('","',$meses).'")';

??

 

Mas a respeito do código galera, Vou tentar aki! jajá posto os resultados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Basta você dar um echo da query e você vai entender o que o trecho faz.

Para entender a função implode acesse http://www.php.net/implode

quanto ao IN significa que o campo em questão pode ter um dos valores que ali constarão.

 

Para entender o IN do mysql acesse Operadores de comparações MySQL

 

Ou Tutorial alternativo

 

Ou pesquise no google.

 

Foi assim que achei todas as informações.

 

Abraços.

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.