Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
Boa...rsrs
O X da questão é pegar exatamente os dias da semana, é nisso que to quebrando a cabeça.
De uma lida neste tópico, talvez ele lhe clareie as idéias ^_^
http://forum.imasters.com.br/index.php?/topic/415936-somar-valores-por-semana/
Abraços.
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!
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
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.
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.
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...
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.
$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....
>
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
é 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 usuariosentã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 ^_^
Willian, rsrs...
Bem sacado, mas só pq você chamou de gambiarra fiquei com medo.rsrs
Vou testar aqui...
Já posto os resultados...
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'.
..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...
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
rsrs...Problema resolvido Srs.
Esse tópico vai salvar muitas vidas ainda...rsrs
Obrigado a TODOS!
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... ^_^
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.
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.