Foros del Web » Programando para Internet » PHP »

consulta con php+mysql

Estas en el tema de consulta con php+mysql en el foro de PHP en Foros del Web. buenas, tengo un problema. lo comento en este foro pq creo que la solucion debe de ser una funcion en php. si estoy equivocado pasaré ...
  #1 (permalink)  
Antiguo 12/01/2010, 10:36
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
consulta con php+mysql

buenas,

tengo un problema. lo comento en este foro pq creo que la solucion debe de ser una funcion en php. si estoy equivocado pasaré el mensaje al foro de mysql.

el problema es que tengo una base de datos de personas. en ella tengo una tabla con los datos personales de estos clientes.

cuando se dan de alta, no pensé el tema o la posibilidad de tener que hacer busquedas detalladas de los mismos. tengo un campo fecha de nacimiento, y guardo los datos tal que asi:

12 de Enero de 1976

que problema me encuentro? que claro, no puedo evaluar la edad con el campo que tengo. y como tengo que obtener el listado segun la fecha, no se como hacerlo.

claro, si obtengo el listado de clientes y entonces hago una lectura de la linea a mostrar, obtengo el idcliente y con la funcion substr obtengo los 4 ultimos digitos, y le resto la fecha actual obtengo la fecha. pero el problema es que necesito crear un listado inicial para comparar la variable, me explico?

por eso no tengo solucion. y claro, modificar los 5000 clientes uno por uno la edad (cosa que seria la ideal), como que es una paliza.

alguna solucion?

hay forma de automatizar para que me vaya el haciendo un update obteniendo la edad?

saludos!

ferranweb
  #2 (permalink)  
Antiguo 12/01/2010, 10:41
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Respuesta: consulta con php+mysql

Todos las esas fechas tienen tal cual ese formato que pusiste??

Código:
12 de Enero de 1976
Si es así... tienes salvación.

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #3 (permalink)  
Antiguo 12/01/2010, 10:50
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: consulta con php+mysql

acabo de hacer esto.. espero te de una idea..


Código PHP:
Ver original
  1. $fecha = "12 de Enero de 1976";
  2. list($dia,$mes,$anyo) = explode(" de ",$fecha);
  3. $meses = array(1=>"Enero",2=>"Febrero",3=>"Marzo",4=>"Abril",5=>"Mayo",6=>"Junio",7=>"Julio",8=>"Agosto",9=>"Septiembre",10=>"Octubre",11=>"Noviembre",12=>"Diciembre");
  4. list($mes) = array_keys($meses, $mes);
  5. echo date("d-m-Y",mktime(0,0,0,$mes,$dia,$anyo));

saludos
__________________
More about me...
~ @rhyudek1
~ Github
  #4 (permalink)  
Antiguo 12/01/2010, 11:00
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Respuesta: consulta con php+mysql

Exacto!

Falta ver si a ferranWEB le sirve...

__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #5 (permalink)  
Antiguo 12/01/2010, 11:30
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
Respuesta: consulta con php+mysql

carlx tengo la fecha como dices, pq tengo salvacion?

Código PHP:

...SELECT de la bd con las preferencias de busqueda, provincia, o sexo, estudios...

<?while ($row mysql_fetch_array($resultados)){
while (
$row mysql_fetch_array($resultados)){
    
$id=$row["id"];
    
    
$inmoQuery2 mysql_query("SELECT * FROM datos_personales WHERE id='$id'") or die(mysql_error());

$userArray2;

    if (
mysql_num_rows($inmoQuery2) > 0)
    {
        
$userArray2 mysql_fetch_array($inmoQuery2);
        
    }    

$edad $userArray2["fecha_nacimiento"];

$edad=substr($edad,-4);

$hoy date("Y");

$edad_actual$edad $hoy;

  
?>
el problema es que la edad debe de ser un parametro de busqueda, y claro, aun no se el id del cliente... me entendeis? el valor edad ya lo obtengo, pero lo obtengo a posteriori

saludos!
  #6 (permalink)  
Antiguo 12/01/2010, 12:14
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Respuesta: consulta con php+mysql

Porque te toca hacer update con esas fechas formateadas...

Es decir, copias esa tabla con un nombre temporal... "clientes_con_fecha". La idea es que crees una tabla espejo de la que tienes, pero la nueva tabla tendrá el campo de la fecha tipo DATE.

Cuando tengas la nueva tabla "clientes_con_fecha". Haces algo parecido a esto:

Código MySQL:
Ver original
  1. select * from tabla_vieja where fecha = '12 de Enero 1976';

Te traera unos registros y a esos registros en la tabla nueva le aplicas el update con la fecha formateada de la manera como te ayudó Hidek1

Código MySQL:
Ver original
  1. update tabla_con_fecha set fecha='12-1-1976' where id_cliente in (1,2,3,4,5,6);

Es sólo una manera de hacerlo, creo que la menos rápida. Pero te dará ideas.

Otra manera es haciendo subconsultas, te ayuda mucho con le performance.

Cuando estés seguro que todas las fecha tipo DATE están correctas cambias el nombre de la tabla "tabla_con_fecha" por el verdadero nombre de la tabla (osea la anterior).

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com
  #7 (permalink)  
Antiguo 12/01/2010, 12:28
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: consulta con php+mysql

bueno eso que dice Carxl esta bien

aqui esta expresado en codigo para que lo aga solo =B

Código PHP:
Ver original
  1. $consulta = "SELECT fecha FROM tabla";
  2. $consulta = mysql_query($consulta);
  3. while($resultado = mysql_fetch_array($consulta)){
  4.     if(!strstr($resultado["fecha"],"-")){ // para que no repita consulta en fechas ya formateadas
  5.         list($dia,$mes,$anyo) = explode(" de ",$resultado["fecha"]);
  6.         $meses = array(1=>"Enero",2=>"Febrero",3=>"Marzo",4=>"Abril",5=>"Mayo",6=>"Junio",7=>"Julio",8=>"Agosto",9=>"Septiembre",10=>"Octubre",11=>"Noviembre",12=>"Diciembre");
  7.         list($mes) = array_keys($meses, $mes);
  8.         $nueva_fecha = date("d-m-Y",mktime(0,0,0,$mes,$dia,$anyo));
  9.         $consulta2 = "UPDATE tabla SET fecha = '$nueva_fecha' WHERE fecha = '$resultado[fecha]'";
  10.         mysql_query($consulta2);
  11.     }
  12. }

recuerda ejecutarlo solo 1 ves para evitar problemas
__________________
More about me...
~ @rhyudek1
~ Github
  #8 (permalink)  
Antiguo 12/01/2010, 14:28
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
Respuesta: consulta con php+mysql

gracias compis,

hidek no acabo de entender tu codigo... puedes explicarme? puedo aplicarlo sobre la tabla de datos personales?

saludos
  #9 (permalink)  
Antiguo 12/01/2010, 14:32
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: consulta con php+mysql

claro

Código PHP:
Ver original
  1. $consulta = "SELECT fecha FROM tabla"; // haces la consulta obteniendo todas las fechas de la tabla..
  2. $consulta = mysql_query($consulta); // ejecutas la consulta
  3. while($resultado = mysql_fetch_array($consulta)){ // obtienes los datos en array
  4.     if(!strstr($resultado["fecha"],"-")){ // para que no repita consulta en fechas ya formateadas
  5.         list($dia,$mes,$anyo) = explode(" de ",$resultado["fecha"]); // separas los datos en 3 variables
  6.         $meses = array(1=>"Enero",2=>"Febrero",3=>"Marzo",4=>"Abril",5=>"Mayo",6=>"Junio",7=>"Julio",8=>"Agosto",9=>"Septiembre",10=>"Octubre",11=>"Noviembre",12=>"Diciembre");
  7.         // array de los meses con su respectivos numeros
  8.         list($mes) = array_keys($meses, $mes); // obtienes el numero del mes
  9.         $nueva_fecha = date("Y-m-d",mktime(0,0,0,$mes,$dia,$anyo)); // creas la nueva fecha formateada para SQL
  10.         $consulta2 = "UPDATE tabla SET fecha = '$nueva_fecha' WHERE fecha = '$resultado[fecha]'"; // haces una consulta updateando las fechas que esten en el formato de texto cambiandolas por el nuevo formato '00-00-0000'
  11.         mysql_query($consulta2); // ejecutas la consulta
  12.     }
  13. }


eso solo eso :B
__________________
More about me...
~ @rhyudek1
~ Github
  #10 (permalink)  
Antiguo 14/01/2010, 09:34
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
Respuesta: consulta con php+mysql

buenas hidek1,

no entiendo que es lo que hace exactamente lo que comentas.

si queremos hacer un update de todo, como podemos hacerlo a la vez? es decir, de que forma sabemos el id de cada cliente?

he pensado que como tenemos un campo fecha_nacimiento que ya me va bien, podriamos generar un campo edad, y que se hiciese a la vez la comprobación de la edad de cada uno y se fuese guardando en el campo edad?

saludos
  #11 (permalink)  
Antiguo 14/01/2010, 09:41
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Tokyo - Japan !
Mensajes: 3.867
Antigüedad: 14 años, 6 meses
Puntos: 334
Respuesta: consulta con php+mysql

el código lo único que hace es que al ejecutarlo 1 ves en php toma todos los datos de tu tabla de fechas en el formato "12 de Enero de 1976" y los deja todos como "1976-01-12", el cual es el estándar de mysql ...

lo de la edad no entendí realmente.. ni para q seria necesario teniendo ya el de la fecha de nacimiento..
__________________
More about me...
~ @rhyudek1
~ Github
  #12 (permalink)  
Antiguo 14/01/2010, 10:59
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
Respuesta: consulta con php+mysql

buenas hidek1,

te cuento por si no he acabado de explicarme. tengo unos clientes guardados en mi bd. y tengo unos paramtetros de busqueda: provincia, sexo, estudios...

el problema es que yo tengo guardada la fecha de nacimiento., y la busqueda que necesito hacer es por edad. que significa eso, que necesito tener la edad para poder buscar los paramtros, por ejemplo:

Clientes de Barcelona, Hombre, Entre 20 y 30 años

y claro como no tengo la edad, no puedo establecer ese parametro de busqueda. he conseguido coger el año del campo fecha_nacimiento, y restarlo al año actual me obtiene la edad. pero claro, lo puedo hacer a posteriori pq para generar la edad primero tengo que leer toda la bd....

me entiendes?
  #13 (permalink)  
Antiguo 14/01/2010, 11:11
Avatar de FNX_NET  
Fecha de Ingreso: marzo-2004
Ubicación: EN EL INFIERNO.....
Mensajes: 1.707
Antigüedad: 20 años
Puntos: 7
Respuesta: consulta con php+mysql

bueno no si te sirve pero en tu problema podrias buscar las edades como rango de fechas
entonces si buscas personas entre 20 y 30 años

solo calculas 14/01/1990 y 14/01/1980 y haces un between con eso

ademas las edades son dinamicas no tendria caso guardar la edad si se va a modificar mejor la fecha de nacimiento para sacar eso
__________________
:-D "Que se libere del cielo confinado; que mi cuerpo sea la espada de hielo negro que nos lleve al abismo; que ningún poder pueda detenernos...Destructora de las almas de los dioses!!!":adios:


:pirata:

Última edición por FNX_NET; 14/01/2010 a las 11:36
  #14 (permalink)  
Antiguo 15/01/2010, 08:27
Avatar de Carxl
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: Bogotá
Mensajes: 2.993
Antigüedad: 17 años, 8 meses
Puntos: 70
Respuesta: consulta con php+mysql

Claro, todo se resume a lo que coloqué algunos post arriba... te toca obligatoriamente ferranWEB tener un campo tipo DATE para que puedas hacer las consultas por edad.

Inclusive, lo que tú dices ( lo de crear un campo en la misam tabla pero tipo DATE ) es viable, solo asegúrate que cuando hayas hecho las actualizacines correspondientes, eliminar el campo que tiene la fecha como VARCHAR.

Ya te dí una idea, púlela y obtendrás lo que necesitas.

Saludos
__________________
Hay 10 tipos de personas, los que entienden binario y los que no. (Anónimo)
www.programandoweb.com

Etiquetas: php-mysql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:02.