Ir para conteúdo
Fórum Script Brasil
  • 0

SELECT


Guest CLID JUNIOR

Pergunta

Guest CLID JUNIOR

Tenho a seguinte dificuldade :

Preciso fazer um gráfico onde busco os valores numa tabela através de um comando SELECT a partir de uma certa data ($data).

Para simplificar a exposição, a tabela tem três campos :

DATA

NOME

OCORRÊNCIA

Preciso contar as OCORRÊNCIAS, por NOME e por DATA para fazer um gráfico de barras.

Ocorre que quando uso COUNT('OCORR') para saber o número de OCORRÊNCIAS por DATA e por NOME, só retornam valores dos registros onde existam dados compatíveis com o SELECT.

veis com o SELECT.

Por exemplo : SELECT COUNT('OCORR') WHERE NOME='Mário' AND DATA>'$data' AND OCORR='Falta'

Minha dificuldade : Preciso que retorne um valor ZERO, quando não há OCORRÊNCIA na DATA com determinado NOME. Ou seja, preciso ter uma barra (que vai ser um vazio) com o valor 0 (zero).

O que está acontecendo : Quando não há dado que atenda as condições, o SELECT pula a DATA, claro.

Algum iluminado tem uma "luz" para me ajudar, alguma idéia, alguma mancada, gambiarra, etc... ?

Obrigadão !!!

Clid

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0
Use mysql_num_rows para saber quantos resultados vieram na consulta...

Se não me falha a memória a função abaixo poderá auxiliá-lo. Execute

SELECT COALESCE(COUNT('OCORR'), 0) WHERE NOME='Mário' AND DATA>'$data' AND OCORR='Falta'

Link para o comentário
Compartilhar em outros sites

  • 0
Guest CLID JUNIOR

Infelizmente não funciona.

Se eu usar num_row, me retorna quantidade de resultados dentro das condições.

Se eu uso COALESCE(COUNT('OCORR'), 0), só voltam os valores que sejam ZERO.

Eu preciso que voltem TODOS, que sejam ou não ZERO, para que eu possa fazer constar no gráfico.

Algo como array(30,25,0,25,27,0,32)

Agradeço a boa vontade de vocês.

Abraços

Clid

Link para o comentário
Compartilhar em outros sites

  • 0
Guest CLID JUNIOR

É, Denis, agora não voltou dado nenhum. Até cruzei os dedos aqui...

Ah ! Precisei colocar o GROUP BY no final.

Aliás, tentei com GROUP BY DATA e com GROUP BY OCORR . Ambos não retornaram dado nenhum.

SELECT IF(COUNT('OCORR') IS NULL, 0, COUNT('OCORR') ) WHERE NOME='Mário' AND DATA>'$data' AND OCORR='Falta' GROUP BY DATA

Ficou me parecendo que quando não há dado que atenda as condições, o resultado não volta como NULL. Ele simplesmente não retorna.

Pelo jeito vou acabar tendo que me lembrar do velho Clipper e vir contando de cima até em baixo, fazendo um WHILE da vida com uns IFs no meio...

Mas continuo agradecendo qualquer ajuda menos traumática.

Grato.

Clid

Link para o comentário
Compartilhar em outros sites

  • 0

'CLID JUNIOR',

OCOR é um atributo?

Se sim, retire as aspas do count e tente novamente.

Existe esta outra forma:

SELECT SUM(IF(OCORR IS NULL, 0, 1) WHERE NOME='Mário' AND DATA>'$data' AND OCORR='Falta' GROUP BY DATA
Outra alternativa é usar COUNT(*) assim:
SELECT COUNT(*) WHERE NOME='Mário' AND DATA>'$data' AND OCORR='Falta'

Link para o comentário
Compartilhar em outros sites

  • 0
Guest CLID JUNIOR

Aliás, usei a sua segunda sugestão também, Denis.

Dessa forma, voltamos à estaca zero.

Isso faz com que a data seja pulada na matriz de resultados quando em uma determinada data a contagem da ocorrência FALTA é zero registros.

É uma sinuca de bico.

Imagina que as datas estejam assim :

[25/05 ; 26/05 ; 27/05 ; 28/05 ]

E as ocorrências para cada data sejam:

[ 34 ; 23 ; 0 ; 26]

O que acontece ? Na matriz de dados retorna somente [ 34 ; 23 ; 26]. O ZERO do dia 27/05 é desprezado.

Assim, no gráfico, o dado do dia 28/05 toma o lugar do dado do dia 27/05...

Clid

Link para o comentário
Compartilhar em outros sites

  • 0
OCORR é o nome do campo das OCORRÊNCIAS, do cenário que descrevi.

Retirei as aspas, mas não adiantou. Continua não voltando dado algum.

Clid

e as outras opções?

Link para o comentário
Compartilhar em outros sites

  • 0
Guest CLID JUNIOR
OCORR é o nome do campo das OCORRÊNCIAS, do cenário que descrevi.

Retirei as aspas, mas não adiantou. Continua não voltando dado algum.

Clid

e as outras opções?

Tentei todas as sugeridas.

Nada !

Se eu achar um jeito de fazer, posto aqui.

Deve haver mais colegas com esta específica dificuldade.

Clid

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...