Ver Mensaje Individual
  #9 (permalink)  
Antiguo 31/03/2011, 16:01
leif_sk8er
 
Fecha de Ingreso: junio-2009
Mensajes: 309
Antigüedad: 13 años, 1 mes
Puntos: 5
Respuesta: buscar por edad

Puede que sea algo complicado de entender, pero estoy haciendo un buscador, con opciones en el input de busqueda, en plan que le puedas pasar parametros... Por ejemplo: edad:22-24 o edad:>30-<20 Os pego el codigo que al final he hecho aunque realmente para este tema solo importa las fechas, por si alguien le puede sacar provecho.

Al final creo haberlo solucionado y el problema no era sumarle un año, era restarle 1 y simplemente con las fechas se puede hacer y un between... aunque puede que algun aspecto me esté dejando...

Código PHP:
Ver original
  1. // EDAD
  2.             // En vez de menor que utilizamos 2 arrobas: @@
  3.             if(($tiposCondiciones[5] == $filtro || $tiposCondicionesGlobal[5] == $filtro) && strlen($valor) > 0){
  4.             $ano = 60*60*24*365;
  5.             echo $partes;
  6.            
  7.             $partes = explode("-", $valor);
  8.             //echo 60*24*365* (int) $partes[0];
  9.             $val = str_replace(">", '', $partes[0]);
  10.             $val = str_replace("@@", '', $val);
  11.                
  12.             $timeEdad1 = time() - ($ano*$val);
  13.             $tE1 = $timeEdad1 - $ano;
  14.            
  15.                 // La primera edad no tenga mayor o menor
  16.                 if(!preg_match("/\>[0-9]{2}$/", $partes[0]) && !preg_match("/@@[0-9]{2}$/", $partes[0])){
  17.                 // No quiere ver un intervalo, una edad exacta             
  18.                 $ampli_sql_edad = " ua.FECHA_NACIMIENTO BETWEEN $tE1 AND $timeEdad1 AND ";
  19.                 $valor_fijo = 1;
  20.                 }else{
  21.                 // Quiere usar intervalos
  22.                     if(preg_match("/\>[0-9]{2}$/", $partes[0])){
  23.                     // Mayor
  24.                     $ampli_sql_edad = " ua.FECHA_NACIMIENTO < $timeEdad1 ";
  25.                     }
  26.                    
  27.                     if(preg_match("/@@[0-9]{2}$/", $partes[0])){
  28.                     // Menor
  29.                     $ampli_sql_edad = " ua.FECHA_NACIMIENTO > $timeEdad1 ";
  30.                     }
  31.                 }
  32.            
  33.            
  34.                 if(count($partes) > 1){
  35.                 $val = str_replace(">", '', $partes[1]); // Quitamos los posibles simbolos
  36.                 $val = str_replace("@@", '',$val);
  37.                 $timeEdad2 = time() - ($ano*$val);
  38.                 $tE2 = $timeEdad2 - $ano;
  39.                
  40.                 // Quiere buscar en otra fecha
  41.                     if(!preg_match("/\>[0-9]{2}$/", $partes[1]) && !preg_match("/@@[0-9]{2}$/", $partes[1])){
  42.                     // Una edad exacta
  43.                         // En caso de que anteriormente se haya buscado por valor fijo, entonces lo que buscamos es un intervalo: 22-24, todos los que tengan de 22 a 24 años.
  44.                         if($valor_fijo == 1){
  45.                             // Miramos cual de los dos es el mayor para poner bien el between
  46.                             if($timeEdad1 > $timeEdad2){
  47.                             $ampli_sql_edad = " ua.FECHA_NACIMIENTO BETWEEN $tE2 AND $timeEdad1 AND ";
  48.                             }else{
  49.                             $ampli_sql_edad = " ua.FECHA_NACIMIENTO BETWEEN $tE1 AND $timeEdad2 AND ";
  50.                             }
  51.                         }else{
  52.                         // No buscaba un valor fijo: >30-24, buscamos todos los mayores de 30 y que tengan 24 exactamente
  53.                         $tE2 = $timeEdad2 - $ano;
  54.                         $ampli_sql_edad = " ($ampli_sql_edad OR ua.FECHA_NACIMIENTO BETWEEN $tE2 AND $timeEdad2) AND ";
  55.                         }
  56.                     }else{
  57.                     // Quiere usar intervalos
  58.                         if(preg_match("/\>[0-9]{2}$/", $partes[1])){
  59.                         // Mayor
  60.                             if($valor_fijo == 1){
  61.                             $ampli_sql_edad.= " ua.FECHA_NACIMIENTO < $timeEdad2 AND ";
  62.                             }else{
  63.                             $ampli_sql_edad = " ($ampli_sql_edad OR ua.FECHA_NACIMIENTO < $timeEdad2) AND ";
  64.                             }
  65.                         }
  66.                        
  67.                         if(preg_match("/@@[0-9]{2}$/", $partes[1])){
  68.                         // Menor
  69.                             if($valor_fijo == 1){
  70.                             $ampli_sql_edad.= " ua.FECHA_NACIMIENTO > $timeEdad2 AND ";
  71.                             }else{
  72.                             $ampli_sql_edad = " ($ampli_sql_edad OR ua.FECHA_NACIMIENTO > $timeEdad2) AND ";
  73.                             }
  74.                         }
  75.                     }
  76.                 }else{
  77.                     if($valor_fijo != 1){
  78.                     $ampli_sql_edad = $ampli_sql_edad.' AND ';
  79.                     }
  80.                 } // Fin if count
  81.                
  82.                
  83.                
  84.                
  85.                
  86.                
  87.             } // Fin if condicion edad

Última edición por leif_sk8er; 31/03/2011 a las 18:48