Ir para conteúdo

POWERED BY:

Arquivado

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

Diego Velox

[Resolvido] Como filtrar resultados com "idade mínima" e

Recommended Posts

Seguinte, tenho um sistema de usuários cadastrados e estou querendo deixar meus visitantes filtrarem os resultados da seguinte forma:

 

o visitante coloca no form "idade mínima" o valor 18 (anos) e na "idade máxima" 30 (anos), no lado do POST já coloquei os comandos SQL para outras filtragens, segue o formato:

 

$sqlbusca = "SELECT * FROM `usuarios` WHERE estado LIKE '%".$estadobusca."%' AND cidade LIKE '%".$cidadebusca."%' AND...";

 

Mas no banco só tem a data de nascimento dos usuários, no formato padrão (yyyy-mm-dd), se alguém puder e ajudar ficarei muito grato mesmo, valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que esse código aqui pode ajudar '-'

<?php
// Data, DB
$data  = '1990-10-11';
$dataE = explode('-', $data);

// $dataE[0] == 1990 |ANO
// $dataE[1] == 10   |MES
// $dataE[2] == 11   |DIA

//Data Hoje:
date_default_timezone_set("Brazil/East");

$dia = date('d'); // 31
$mes = date('m'); // 12
$ano = date('Y'); // 2011

$idade = $ano - $dataE[0]; // 21 ANOS

if($dataE[1] > $mes){
$idade--;
}
if($dataE[1] == $mes && $dia < $dataE[2]){
$idade--;
}

echo "Você tem ".$idade." anos de idade!";
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

da pra fazer direto no mysql:

 

YEAR(CURDATE()) - YEAR(dn)) - (RIGHT(CURDATE(),5) < RIGHT(dn,5)

 

dn é o campo com a data de nascimento.

 

Vamos entender o código:

 

YEAR(CURDATE()) - YEAR(dn))

 

Neste exemplo estou usando o CURDADE que pega a data atual, você pode usar uma variável com a data que quiser. Lembrando que dn é o campo da tabela onde esta a data de nascimento, o que acontecera é que será subtraído o ano de nascimento do ano atual

 

Ex:

Usaremos o registro do Fernando cuja data de nascimento é 1986-03-28 e minha data atual 2011-12-31 (véspera de natal hehehe)

 

2011 – 1985= 25

 

 

- (RIGHT(CURDATE(),5) < RIGHT(dn,5)

 

Bem, na primeira parte do código calculamos a idade sem considerar se o individuo já fez aniversario ou não. Aqui o RIGHT e o 5 fará usar os números do lado direito, lembre-se que o formato padrão de data no mysql é aaaa/mm/dd. Então o código usara mm/dd e fará o calculo usando o operador < para saber se a data atual é menor que a data de nascimento.

 

OBS:

No mysql existe o true=1 e false=0, então esse tipo de expressão ira retornar 1 ou 0.

 

EX:

 

12-31 < 03-28 = 0

(1224 é menor que 0328= falso)

 

Isto significa que resumimos a expressão -(RIGHT(CURDATE(),5) < RIGHT(dn,5) com o numero - 0. Ou seja eu vou subtrair 0 da idade 25 porque o Fernando já fez aniversario, se a o Fernando fizesse aniversario dia 30 de dezembro (1224 < 1230 = 1) seria subtraído 1 de 25 dando a idade atual 24 anos.

 

YEAR(CURDATE()) - YEAR(dn)) - (RIGHT(CURDATE(),5) < RIGHT(dn,5)

2011 - 1985 - 1231 < 0328

2011 - 1985 – 0

25

 

abaixo codigo completo com dados para teste(este é meu primero tuto softwaymagazine.blogspot)

 

Arquivo: conectar.php

<?php
//configure a conexão com a base de dados
$servidor = "localhost"; //nome do servidor (localhost)
$user = "root"; //usuário do banco de dados
$senha = "1234"; //senha do banco de dados
$db = "tutos"; //nome da base de dados

//executa a conexão com o banco, caso contrário mostra o erro ocorrido
$conexao = mysql_connect($servidor,$user,$senha) or die (mysql_error());

//seleciona a base de dados daquela conexão, caso contrário mostra o erro ocorrido
$banco = mysql_select_db($db, $conexao) or die(mysql_error());	
?>

 

Arquivo: tabela.php (execute para criar uma tabela com dados para teste)

<?php
//inclui o arquivo de conexão e seleciona o banco de dados
if(file_exists("conectar.php")) {
require "conectar.php";		
} 
else {
echo "Arquivo conectar.php nao foi encontrado";
exit;
}
mysql_select_db("$banco", $conexao);

//criando a tabela pessoas com os campos id, nome e dn.
$criartab= "CREATE TABLE `pessoas` (
`id` INT( 5 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`nome` VARCHAR( 35 ) NOT NULL ,
`dn` DATE NOT NULL 
) ENGINE = innodb CHARACTER SET utf8 COLLATE utf8_general_ci;
";
mysql_query($criartab, $conexao) or die(mysql_error());

//insere dados da tabela pessoas.
$inserir= "INSERT INTO `tutos`.`pessoas` (`id` ,`nome` ,`dn` ) VALUES 
(NULL , 'Marcela', '1991-04-16'),
(NULL , 'Carolina', '1993-11-22'),
(NULL , 'Julia', '1981-08-17'),
(NULL , 'Fernando', '1986-03-28'),
(NULL , 'Gustavo', '1995-12-13'),
(NULL , 'João', '1989-05-10')";
mysql_query($inserir, $conexao) or die(mysql_error());
?>

 

Arquivo: teste1.php

<?php
//inclui o arquivo de conexão
if(file_exists("conectar.php")) {
require "conectar.php";		
} else {
echo "Arquivo conectar.php nao foi encontrado";
exit;
}

//seleciona o banco de dados
mysql_select_db("$banco", $conexao);

//query
$result = mysql_query("SELECT * ,
(YEAR(CURDATE()) - YEAR(dn)) - (RIGHT(CURDATE(),5) < RIGHT(dn,5)) AS idade 
FROM pessoas 
HAVING idade BETWEEN 20 AND 30"); //aqui busco pessoas com idade entre 20 e 30 anos

//estrutura de controle
//Se nao achar nada, lança essa mensagem
if (empty($result)) { 
   echo "Nenhum registro encontrado.";
}

//exibe o resultado contatenando o id e o nome
while($row = mysql_fetch_array($result)) {
    echo $row['id'].' '.$row['nome'].'<br>';	 
 }
?>

 

Arquivo: form.php

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>formulario</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<form name="form1" method="post" action="teste1.php">
 <table width="50%" border="1" align="center">
   <tr bordercolor="#0000FF"> 
     <td width="35%">Seleciono a idade</td>
     <td width="32%"> De 
       <?php			
	function monta_select($campo, $start, $end) {
$select = "<select name=\"$campo\" id=\"$campo\">\n";
for($i = $start; $i <= $end; $i++) {			
	$select .= "\t<option value=\"". sprintf("%02d", $i) ."\">".sprintf("%02d", $i)."</option>\n";	
} 							
	$select .= "</select>\n";
return $select;	
}	

		echo monta_select("idade1", 1, 60);


	?>
     </td>
     <td width="33%"> Até 
       <?php
		  echo monta_select("idade2", 1, 60);
		  ?>
     </td>
   </tr>
   <tr bordercolor="#0000FF"> 
     <td> </td>
     <td colspan="2"> 
       <input type="submit" name="Submit" value="Enviar"></td>
   </tr>
 </table>
 </form>
</body>
</html>

Compartilhar este post


Link para o post
Compartilhar em outros sites

WHERE birthdate >= DATE_SUB(NOW(), INTERVAL 30 YEAR) 
 AND birthdate <= DATE_SUB(NOW(), INTERVAL 18 YEAR)

 

Caiu como uma luva, só isso que tenho que falar, agradeço muito cara salvou a pátria por aqui, valeu!!!

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.