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// EDAD
// En vez de menor que utilizamos 2 arrobas: @@
if(($tiposCondiciones[5] == $filtro || $tiposCondicionesGlobal[5] == $filtro) && strlen($valor) > 0){ $ano = 60*60*24*365;
echo $partes;
//echo 60*24*365* (int) $partes[0];
$timeEdad1 = time() - ($ano*$val); $tE1 = $timeEdad1 - $ano;
// La primera edad no tenga mayor o menor
// No quiere ver un intervalo, una edad exacta
$ampli_sql_edad = " ua.FECHA_NACIMIENTO BETWEEN $tE1 AND $timeEdad1 AND ";
$valor_fijo = 1;
}else{
// Quiere usar intervalos
// Mayor
$ampli_sql_edad = " ua.FECHA_NACIMIENTO < $timeEdad1 ";
}
// Menor
$ampli_sql_edad = " ua.FECHA_NACIMIENTO > $timeEdad1 ";
}
}
$val = str_replace(">", '', $partes[1]); // Quitamos los posibles simbolos $timeEdad2 = time() - ($ano*$val); $tE2 = $timeEdad2 - $ano;
// Quiere buscar en otra fecha
// Una edad exacta
// 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.
if($valor_fijo == 1){
// Miramos cual de los dos es el mayor para poner bien el between
if($timeEdad1 > $timeEdad2){
$ampli_sql_edad = " ua.FECHA_NACIMIENTO BETWEEN $tE2 AND $timeEdad1 AND ";
}else{
$ampli_sql_edad = " ua.FECHA_NACIMIENTO BETWEEN $tE1 AND $timeEdad2 AND ";
}
}else{
// No buscaba un valor fijo: >30-24, buscamos todos los mayores de 30 y que tengan 24 exactamente
$tE2 = $timeEdad2 - $ano;
$ampli_sql_edad = " ($ampli_sql_edad OR ua.FECHA_NACIMIENTO BETWEEN $tE2 AND $timeEdad2) AND ";
}
}else{
// Quiere usar intervalos
// Mayor
if($valor_fijo == 1){
$ampli_sql_edad.= " ua.FECHA_NACIMIENTO < $timeEdad2 AND ";
}else{
$ampli_sql_edad = " ($ampli_sql_edad OR ua.FECHA_NACIMIENTO < $timeEdad2) AND ";
}
}
// Menor
if($valor_fijo == 1){
$ampli_sql_edad.= " ua.FECHA_NACIMIENTO > $timeEdad2 AND ";
}else{
$ampli_sql_edad = " ($ampli_sql_edad OR ua.FECHA_NACIMIENTO > $timeEdad2) AND ";
}
}
}
}else{
if($valor_fijo != 1){
$ampli_sql_edad = $ampli_sql_edad.' AND ';
}
} // Fin if count
} // Fin if condicion edad