Ir para conteúdo

POWERED BY:

Arquivado

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

MROLIVEIRA68

Consultas em dias vagos no banco

Recommended Posts

OI PESSOAL EU PRECISO FAZER UMA CONSULTA EM QUE SEJA RELACIONADO TODOS DIAS DO

MES MESMO NÃO EXISTINDO NO BANCO,TIPO VISITAS DO MES A PRINCIPIO TRANSFIRO PRA
OUTRA TABELA COM O "between" AI FAÇO O "select" MAS, TA FICANDO MUITO LENTO O PHP RODAR PRA BUSCAR VISITAS UMA POR UMA E DEPOIS BUSCAR OS REGISTROS QUERO FAZER ISTO DIRETO NO MYSQL, QUERO MOSTRAR MESMO SE A PESSOA NÃO COMPARECEU.

Compartilhar este post


Link para o post
Compartilhar em outros sites

EU QUERIA USAR ESTE SQL MAS, SE O VISITANTE COMPARECER SOMENTE UM DIA O RETORNO
VAI SER SOMENTE UM REGISTRO E QUERO MOSTRAR OS DIAS AUSENTES TAMBÉM, SENDO QUE
TENHO CERCA DE 600 VISITANTES CADASTRADOS

SELECT v.nome_vis,v.rg_vis,d.data_h,d.h_1,d.h_2
FROM visitante v left join data d
ON (v. id_vis = d. id_vis)
Where (p.data_h BETWEEN ('2013-01-01') and ('2013-01-31')) ORDER BY (v.nome_vis), (p.data_h)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em SQL para se mostrar dados "inexistentes", temos de recorrer a artifícios como mostrados no post #2.

 

Algo como aqui.

 

Ou montar os "ausentes" na aplicação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara você vai ter que fazer uma function.

 

vou te da uma dica.

 

 

FUNCTION

DROP FUNCTION IF EXISTS `visitas_mes`;

CREATE FUNCTION `visitas_mes` (`data_ini` DATE, `data_fim` DATE)
RETURNS DATE
LANGUAGE SQL
SQL SECURITY INVOKER
BEGIN
  DECLARE
      _prox_data date;
    BEGIN
  
       SET _prox_data = data_ini;
  
       WHILE _prox_data <= data_fim DO
          SET _prox_data = _prox_data+1;
       END WHILE;
       RETURN _prox_data;
    END;
END;
SELECT visitas_mes('2013-02-15','2013-02-25');

 

 

 

essa fuction não esta retornando como queria. deve ter alguma forma que retorne a lista do dos dias pelo periodo.

 

ai depois e so faser um if

 

i

IF(selelect data_even from tabela where data_even <> _prox_data) THEN
 SET _prox_data = _prox_data+1;
END IF;

 

 

ai ele vai retorna os dias que não estão na tabela.

 

não resolvie seu problema mais estou te dando uma luz.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja se a query original mais a function do erison resolve

 

 

SELECT v.nome_vis,v.rg_vis,d.data_h,d.h_1,d.h_2
FROM visitante v left join data d
ON (v. id_vis = d. id_vis)
Where (p.data_h BETWEEN ('2013-01-01') and ('2013-01-31')) ORDER BY (v.nome_vis), (p.data_h)

union

SELECT v.nome_vis,v.rg_vis, visitas_mes('2013-01-01','2013-01-31')

FROM visitante

Não estou certo se assim como montei seria possível, mas a ideia e ter aqui TODAS as datas , ao montar o UNION as "faltantes" aparecem.

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.