Ir para conteúdo

POWERED BY:

Arquivado

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

weslleysolo

[Resolvido] Lógica para aniversariantes da semana

Recommended Posts

olá...

 

Aniversariantes do mês foi moleza implementar num sistema aqui, agora, aniversariantes da semana tá complicado.

 

Gostaria de entender a lógica de como desenvolver, se alguém, por favor, dá uma forcinha ae agradeço.

 

Abrax.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Simples amigo weslleysolo.

 

Crie um array com os dias da semana e faça uma busca

no banco de dados pelas datas do array. Se ele encontrar

alguém o mesmo será um aniversariante da semana.

 

A lógica é simples não é? ;)

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A sua semana começa no domingo ou na segunda ?

 

A função Date_Format do MySQL tem o %u que mostra o número da Semana daquela data. Por exemplo:

Select Date_Format(NOW(), '%u') as Semana

Vai te mostrar a semana do ano em que estamos. Então quem faz aniversário esta semana:

Select Nome, Data_Nascimento From Tabela Where Date_Format(NOW(), '%u') = Date_Format(Data_Nascimento, '%u')

Testa!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Periscuelo,

 

Analisei e acho que consigo implmentar...vou testa-la depois, ok! - valeu amigo!

 

 

Ecos,

 

Sua solução me pareceu mais eficiente, e como era mais fácil testa-la primeiro, acabei testando mas o resultado nao foi exato, veja:

Minha tabela teste tem os seguinte dados:

WESLLEY 1979-11-25
NANGELA 1975-11-24
IZABEL 	1997-11-08
CAIO 	2010-11-29
DAVI 	1992-11-21
LUAN 	1990-10-14
MARIA 	1980-09-02 

Usando o camando, indicado:

Select Nome, Data_Nascimento From Tabela Where Date_Format(NOW(), '%u') = Date_Format(Data_Nascimento, '%u')

O resultado foi:

WESLLEY 1979-11-25

O correto seria:

WESLLEY 1979-11-25
NANGELA 1975-11-24
DAVI 	1992-11-21

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo weslley antes de testar, de uma pesquisada nas funções envolvidas.

 

Na query abaixo é óbvio o porque ele só trouxe um resultado. Porque foi o que você pediu. 1 resultado.

A diferença é que apesar de você não querer somente um resultado, foi o que você pediu por não saber exatamente

o que estava fazendo. Por isso existe a importância da pesquisa e aprendizado. Fazer sem entender é complicado.

 

Select Nome, Data_Nascimento From Tabela Where Date_Format(NOW(), '%u') = Date_Format(Data_Nascimento, '%u')
NOW() traz a data do dia. Então é óbvio que ele só vai trazer os registros cujo a data de aniversário seja a do dia.

Para dar certo você tem que ter um array com as datas. Ai sim daria para você fazer a seguinte query

 

SELECT nome, data_nascimento FROM tabela 
WHERE DATE_FORMAT(data_nascimento, '%u') IN(DATE_FORMAT('2010-11-25', '%u'),DATE_FORMAT('2010-11-24', '%u'),DATE_FORMAT('2010-11-21', '%u'))
Claro que para obter o conteúdo que vai dentro de IN você precisa do PHP.

E para isto tem o tópico que sugeri a você.

 

Estude também a função IN() do MySQL para que você possa entender o que ela faz e ter consciência do que solicita

ao seu banco de dados http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por isso existe a importância da pesquisa e aprendizado. Fazer sem entender é complicado.

Muito bem dito, amigo...agradeço o conselho e o farei com certeza...

 

Vou analizar tudo que foi dito aqui e vou procurar entender as funções e saber usa-las de maneira eficiente.

 

Abrax.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Depois que você pegar a Semana você faz o Select então.

Por exemplo, você pega a Semana no PHP

 

$semana = date('%W');
$sql = "Select Nome, Data_Nascimento From Tabela Where Date_Format(Data_Nascimento, '%u') = $semana";

Só que olhando bem no meu POST anterior... eu errei a igualdade. Eu igualei a data de hoje a uma data de nascimento sua. É ao contrário:

Select Nome, Data_Nascimento From Tabela Where Date_Format(Data_Nascimento, '%u') = Date_Format(NOW(), '%u')

Não testei pq não tenho base...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo Ecos me corrija se eu estiver errado.

 

Só que olhando bem no meu POST anterior... eu errei a igualdade. Eu igualei a data de hoje a uma data de nascimento sua. É ao contrário:

 

Select Nome, Data_Nascimento From Tabela Where Date_Format(Data_Nascimento, '%u') = Date_Format(NOW(), '%u')
Acredito eu que neste caso, a ordem dos fatores não altera o produto ou altera?

 

Agora date('W') é mais fácil realmente. Nunca hávia utilizado esta opção.

 

Amigo weslley teste o novo exemplo do amigo Ecos.

Acredito que para o que você precisa vai funcionar perfeitamente.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

$a = 1;
$b = '';

Eu quero que $b seja 1.

 

Então está correto abaixo ?

$a = $b;
Não!

 

Este é o correto:

$b = $a;

Mas como eu disse, não testei a sintaxe porquê não tenho base aqui... pelo exemplo acima faz diferença, agora no SQL talvez a ordem mude talvez não. :S

Vamos esperar....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo weslley teste o novo exemplo do amigo Ecos.

Acredito que para o que você precisa vai funcionar perfeitamente.

Bom, aqui deu o mesmo resultado...só me mostra um resultado, mais precisamente esta data 1979-11-25...

 

 

Amigos,

 

Olha que engraçado:


	$slq = mysql_query("SELECT nome, Date_Format(data_nascimento, '%u') as data FROM usuarios");
	while($d = mysql_fetch_assoc($slq))
	{
		echo $d['nome'].' - '.$d['data'].'<br/>';
	}

teremos:

 

WESLLEY - 47
NANGELA - 48
IZABEL - 45
CAIO - 48
DAVI - 43
LUAN - 46
MARIA - 48

Estamos na 47ª semana...só que MARIA E NANGELA, pela data de aniversario, deveria esta na mesma semana:

	WESLLEY 	1979-11-25 <-
	NANGELA 	1975-11-24 <-
	IZABEL 	1997-11-08
	CAIO 	2001-11-29
 	DAVI 	2004-10-21
	LUAN 	2005-11-14
	MARIA 	1980-11-27 <-

Seria alguma treta com os anos? pois o CAIO faria aniversario só na semana que vem, e mostra a mesma semana que NANGELA e MARIA...

 

ps. amigo Periscuelo, ainda não tentei fazer conforme você disse...ainda, ok.rs

Compartilhar este post


Link para o post
Compartilhar em outros sites

é cara, tem algum problema nesse ano...

 

1975-11-25 48 William

1979-11-25 47 WESLLEY

1975-11-24 48 NANGELA

consegui esse retorno com WEEKOFYEAR() do MySQL...

SELECT nascimento, WEEKOFYEAR(nascimento), nome FROM `usuarios`
então logo, não dá para usar a 'semana do ano'.

 

cara... pensei numa baita gambiarra...

 

que seria 'informar' falsamente para o banco, que os usuarios, nasceram ESTE ANO (em que estamos)

vualá:

 

SELECT nascimento, nome FROM `usuarios` WHERE WEEKOFYEAR( CONCAT( YEAR(NOW()),'-',MONTH(nascimento),'-',DAY(nascimento) ) ) = WEEKOFYEAR( NOW() )
saída:

nascimento nome

1979-11-25 WESLLEY

1975-11-24 NANGELA

1980-11-27 MARIA

1975-11-25 William

 

Resolvido apenas com SQL ^_^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Willian, rsrs...

 

Bem sacado, mas só pq você chamou de gambiarra fiquei com medo.rsrs

Vou testar aqui...

 

Já posto os resultados...

Compartilhar este post


Link para o post
Compartilhar em outros sites

hauhahauhua desculpa cara..

 

mas é que se você for 'pensar como máquina', é gambiarra pegar 'os aniversariantes da semana'.

pq aniversário é um conceito 'relativo' para a agente... e deu para perceber que não faz sentido computacionalmente...

 

 

como ali:

em 1979, o dia 25 de novembro, foi a semana 48 do ano

mas em 1975, o dia 25 de novembro, foi a semana 47 do ano!

 

o 'ajuste' para isso, é trazer para o ano em que estamos, pois é assim que faz sentido para agente.. :lol:

não sei se há forma melhor, mas ai só com o povo no fórum de Banco de Dados.. ^_^

 

minha base de testes era bem pequena, mas acredito que ficou até rápida a query.

Malz não ter respondido antes, queria ver se alguém ia sugerir 'algo diferente'.

Compartilhar este post


Link para o post
Compartilhar em outros sites

..o 'ajuste' para isso...

melhorou.

Rsrs...mas deu certo aqui, e não cansou a consulta.

 

Acho que vou implementar aqui dessa forma...caso alguém poste algo 'melhor', agente muda...

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara... pensei numa baita gambiarra...

OMG Modestia sua classificar isso como gambiarra :o

 

Cara eu já vi gato, mais esse ai veio com pedigree.

Esse ai comia wiskas sashe. :lol:

 

Cara que que isso velho? Magaiver profissão perigo ^_^

Na boa se não fosse a facilidade de implementar isso ae

eu ainda faria do jeito que citei kkkkkkkkkkkkkkk.

 

Quando precisar de um persa ou outras raças raras já sei

quem poderá me defender http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

hUhauhauhuahu :lol:

 

sei lá caras... que bom que ajudou.

É que fui pesquisar um pouco, e não achei nada 'bom'..

 

enfim, não sou especialista em SQL... ^_^

Compartilhar este post


Link para o post
Compartilhar em outros sites

Valeu William Bruno...

Ainda essa semana tava quebrando a cabeça para resolver justamente esse tipo de problema.

Tinha aqui uma função que calcula vencimento, com o prazo de 15 dias....

Tentei alterar mais não consegui, mais essa que você passou aí, resolveu.

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.