Ir para conteúdo

POWERED BY:

Arquivado

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

cPraValer

Como fazer uma consulta MySQL para retornar o NOME de acordo com o per

Recommended Posts

Tenho uma tabela com três colunas: nome, data e periodo. As datas são diversas: 27/08/2011, 30/08/2011, 02/09/2011, 18/09/2011.. e cada período informa quando o registro deve ser exibido: todo domingo, toda sexta, primeiro dia do mês e último dia do mês.

 

Jose | 27/08/2011 | todoDomingo

Maria | 30/08/2011 | todaSexta

Ricardo | 02/09/2011 | primeiroDiaMes

Cassia | 19/09/2011 | ultimoDiaMes

 

Como fazer uma consulta MySQL para retornar o NOME de acordo com o período informado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Os registros são cadastrados, e a partir da data informada, eles só podem ser exibidos nos dias informados no campo 'periodo', exemplo:

 

Maria só será exibida aos domingos, a partir do dia 30/08/2011 (todo domingo após esta data)

Ricardo só será exibido no primeiro dia de cada mês, a partir de 02/09/2011 (ou seja, será exibido dia 01/10/2011, 01/11/2011, 01/12/2011 etc)

Cassia só será exibida no último dia de cada mês, a partir de 19/09/2011 (ou seja, 30/09/2011, 31/10/2011, 30/11/2011 etc)

 

Na consulta, verificar se o dia é segunda, terça, quarta, quinta... e pegar só o registro que for marcado no campo período, e exibir, levando em conta a data de publicação.

 

Dentro da própria consulta sql, verificar se é o primeiro/último dia do mês, se a data atual é igual ou maior que a data informada na tabela, e exibir o registro correspondente.

 

Lí sobre LAST_DAY, DAYOFWEEK, DATEDIFF, mas não consegui bolar uma consulta que faça o que preciso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ao meu ver, ficaria assim:

SELECT 
	IF( CURRENT_DATE() = LAST_DAY( `data` ) OR  -- Se a data corrente for o último dia do mês , ou
	    CURRENT_DATE() = DATE_FORMAT( NOW() , '%Y-%m-01' ) , -- Se a data corrente for o primeiro dia do mês
		 IF( CURRENT_DATE() <= `data` , `data` , -- Se a data corrente for maior ou igual que a data na tabela
		 '' ) , -- Else ( Segundo IF )
		 '' -- Else ( Primeiro IF )
	) AS `Registro`
FROM `clientes`; 

Compartilhar este post


Link para o post
Compartilhar em outros sites
DAYOFWEEK(date)

 

Returns the weekday index for date (1 = Sunday, 2 = Monday, …, 7 = Saturday). These index values correspond to the ODBC standard.

 

Fonte

 

TROQUE O todoDomingo da tabela por 1 por exemplo, n query basta.

 

WHERE DAYOFWEEK(DATA) = '1' 

 

O resto segue +ou- a mesma lógica.

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.