Foros del Web » Programando para Internet » PHP »

Averiguar registro anterior al último

Estas en el tema de Averiguar registro anterior al último en el foro de PHP en Foros del Web. Tengo una consulta que hacer ... Estoy tratando de que en un login me reconozca la última fecha de logueo previo a esta ... para ...
  #1 (permalink)  
Antiguo 17/05/2006, 17:42
Avatar de jpvilar  
Fecha de Ingreso: febrero-2005
Ubicación: Buenos Aires - Argentina
Mensajes: 128
Antigüedad: 12 años, 10 meses
Puntos: 1
Averiguar registro anterior al último

Tengo una consulta que hacer ...

Estoy tratando de que en un login me reconozca la última fecha de logueo previo a esta ... para eso tengo una tabla "users_log" donde cargo cada logueo del usuario ... hasta ahí todo bien el tema es que después de logueado quiero colocar la última vez que entró pero no encuentro la manera que me tome el anterior registro ... pego los códigos a ver si me explico mejor

Código PHP:
function user($user) { 
$u mysql_query("select concat(users.user_nombre,' ',users.user_apellido)as nombre, DATE_FORMAT(users.user_fecha, '%d/%m/%Y')as fecha, DATE_FORMAT(users_log.user_log_fecha, '%d/%m/%Y')as fecha_ultima_visita, DATE_FORMAT(users_log.user_log_fecha, '%H:%i:%s')as hora_ultima_visita from users, users_log where users.user_id='$user' and users.user_id=users_log.user_log_user order by users_log.user_log_fecha desc");
$us mysql_fetch_array($u);
////////////////
// IMPRIME RESULTADO //
echo "Hola $us[nombre], su última visita fué el $us[fecha_ultima_visita] a las $us[hora_ultima_visita]";

¿Se entendió? allí me trae el último registro, o sea "este" ingreso, no el anterior. Al margen que después tendré que ver de colocarle un IF en el caso que sea el primer ingreso ...

Espero me puedan dar una mano con esto ... gracias desde ya ...

Saludos
__________________
JuanP
QUIEN NO SE EQUIVOCA NO APRENDE ...
QUIEN NO APRENDE SE EQUIVOCA ... PERO NO APRENDE
  #2 (permalink)  
Antiguo 17/05/2006, 17:59
Avatar de turco_7  
Fecha de Ingreso: diciembre-2003
Ubicación: Córdoba, Argentina
Mensajes: 1.044
Antigüedad: 14 años
Puntos: 19
jpvilar ..
veo que manejas bastante bien el SQL ... a ver .. por cada ves que el usuario se logea insertas un nuevo registro ? o editas un registro unico por usuario ?

si tu caso es el que insertas un nuevo registro por cada logeo de usuario
en tu tabla deberias tener un campo del tipo auto_increment si ? por ejemplo un id_user
Código PHP:
<?
$u 
mysql_query("select max(id_user) concat(users.user_nombre,' ',users.user_apellido)as nombre, DATE_FORMAT(users.user_fecha, '%d/%m/%Y')as fecha, DATE_FORMAT(users_log.user_log_fecha, '%d/%m/%Y')as fecha_ultima_visita, DATE_FORMAT(users_log.user_log_fecha, '%H:%i:%s')as hora_ultima_visita from users, users_log where users.user_id='$user' and users.user_id=users_log.user_log_user GROUP BY nombre order by users_log.user_log_fecha desc");
Aca lo que hize fue suponer que el campo id_user es autoincrement y le pido que me muestre el maximo id_user que será el último registro insertado...

Me explique ?

saludos
__________________
Mi Blog http://turco7.blogspot.com
Usuario Linux : 404289
Mi última página: http://www.digitalservicecba.com.ar - Reparacion de camaras digitales!
  #3 (permalink)  
Antiguo 17/05/2006, 18:33
Avatar de jpvilar  
Fecha de Ingreso: febrero-2005
Ubicación: Buenos Aires - Argentina
Mensajes: 128
Antigüedad: 12 años, 10 meses
Puntos: 1
Hola Turco_7 ... te cuento ... la tabla users_log que es donde inserto cada logueo de usuarios tiene un indice autoincrement (user_log_id) tal como vos pensaste ... tiene tres campos: user_log_id, user_log_user, user_log_fecha ...

Ahora el tema que no comprendo es con el "select max(id_user)" saco el último registro insertado para "ese usuario" ya que lo estoy filtrando desde el WHERE con el users.user_id="$user" ¿verdad? sería como si al hacer el INSERT coloco un mysql_insert_id() y se lo paso por GET o lo cargo en la sesión ¿no? ... espero ser claro ... nunca fuí muy bueno para explicar o enseñar ...

En caso de ser así lo que necesito es saber el registro "anterior" de ese mismo usuario en la tabla users_log ...

Por otro lado te cuento que probé el código que me pasaste y me está trayendo el primer registro en la tabla users_log ¿que hice mal?

De por sí gracias por la manito que me estás echando

Saludos
__________________
JuanP
QUIEN NO SE EQUIVOCA NO APRENDE ...
QUIEN NO APRENDE SE EQUIVOCA ... PERO NO APRENDE
  #4 (permalink)  
Antiguo 17/05/2006, 19:35
Avatar de turco_7  
Fecha de Ingreso: diciembre-2003
Ubicación: Córdoba, Argentina
Mensajes: 1.044
Antigüedad: 14 años
Puntos: 19
Cita:
Iniciado por jpvilar
Ahora el tema que no comprendo es con el "select max(id_user)" saco el último registro insertado para "ese usuario" ya que lo estoy filtrando desde el WHERE con el users.user_id="$user" ¿verdad? sería como si al hacer el INSERT coloco un mysql_insert_id() y se lo paso por GET o lo cargo en la sesión ¿no? ... espero ser claro ... nunca fuí muy bueno para explicar o enseñar ...

En caso de ser así lo que necesito es saber el registro "anterior" de ese mismo usuario en la tabla users_log ...

Por otro lado te cuento que probé el código que me pasaste y me está trayendo el primer registro en la tabla users_log ¿que hice mal?

De por sí gracias por la manito que me estás echando

Saludos
El select MAX(id) te devuelve el maximo id que existe en la tabla
también tenes el MIN(id) que retorna el minimo id de la tabla y asi ..

si te esta devolviendo el primer campo, sera porque le estas poniendo order by DESC ????
pero no deberia ser asi ... proba de quitarlo ..

cuantas filas te devuelve ????

saludos
__________________
Mi Blog http://turco7.blogspot.com
Usuario Linux : 404289
Mi última página: http://www.digitalservicecba.com.ar - Reparacion de camaras digitales!
  #5 (permalink)  
Antiguo 17/05/2006, 20:07
Avatar de jpvilar  
Fecha de Ingreso: febrero-2005
Ubicación: Buenos Aires - Argentina
Mensajes: 128
Antigüedad: 12 años, 10 meses
Puntos: 1
Te copio el query para que veas como lo estoy haciendo, me devuelve una sola fila, no hago un bucle, solamente me interesa saber cuando fué el último ingreso antes del actual.
Probé con max y con min, con el order by y sin el order by y siempre me trae el mismo resultado, el primer ingreso (el id más bajo) que está cargado en la base de datos para ese usuario ... jaja ... ahora sí que no entiendo nada

Código PHP:
$u mysql_query("select min(users_log.user_log_fecha), concat(users.user_nombre,' ',users.user_apellido)as nombre, DATE_FORMAT(users.user_fecha, '%d/%m/%Y')as fecha, DATE_FORMAT(users_log.user_log_fecha, '%d/%m/%Y')as fecha_ultima_visita, DATE_FORMAT(users_log.user_log_fecha, '%H:%i:%s')as hora_ultima_visita from users, users_log where users.user_id='$user' and users.user_id=users_log.user_log_user GROUP BY nombre ");
$us mysql_fetch_array($u);
////////////////
// IMPRIME RESULTADO //
echo "Hola $us[nombre], su última visita fué el $us[fecha_ultima_visita] a las $us[hora_ultima_visita]"
Gracias por tu ayuda
Saludos
__________________
JuanP
QUIEN NO SE EQUIVOCA NO APRENDE ...
QUIEN NO APRENDE SE EQUIVOCA ... PERO NO APRENDE
  #6 (permalink)  
Antiguo 17/05/2006, 20:51
Avatar de turco_7  
Fecha de Ingreso: diciembre-2003
Ubicación: Córdoba, Argentina
Mensajes: 1.044
Antigüedad: 14 años
Puntos: 19
entonces hace esto ...

$sql = "select max(id_user) where user_nombre = '$nombre'";

Al resultado guardalo en la variable $user
Ese seguro que te devuelve el maximo ... esperemos ...

Luego armate otro sql ..
Código PHP:
<?
$sql 
"
select concat(users.user_nombre,' ',users.user_apellido)as nombre,
DATE_FORMAT(users.user_fecha, '%d/%m/%Y')as fecha,
DATE_FORMAT(users_log.user_log_fecha, '%d/%m/%Y')as fecha_ultima_visita, 
DATE_FORMAT(users_log.user_log_fecha, '%H:%i:%s')as hora_ultima_visita 
from users, users_log 
where users_log.user_log_id = $user
order by users_log.user_log_fecha desc"
;

?>
Te cambio el SQL ... a ver ...

Espero que asi te funcione ...sino pega el grito !!!

PD: Lo edite como 20 veces ... :S
__________________
Mi Blog http://turco7.blogspot.com
Usuario Linux : 404289
Mi última página: http://www.digitalservicecba.com.ar - Reparacion de camaras digitales!

Última edición por turco_7; 17/05/2006 a las 20:57
  #7 (permalink)  
Antiguo 17/05/2006, 21:18
Avatar de jpvilar  
Fecha de Ingreso: febrero-2005
Ubicación: Buenos Aires - Argentina
Mensajes: 128
Antigüedad: 12 años, 10 meses
Puntos: 1
Perdoname turco esta vuelta no te entendí ... pero la sensación que me da es que lo que estás buscando es el id del usuario y lo que necesito sabes es la fecha anterior al último logueo ...

Sobre todo si tenemos en cuenta que cada vez que un usuario se loguea se inserta en la tabla users_log, que es independiente de la tabla users ... entonces necesitaría sacar cual es el último id menos 1 en la tabla que registra los logueos de usuarios ... ¿me explico?

Saludos
__________________
JuanP
QUIEN NO SE EQUIVOCA NO APRENDE ...
QUIEN NO APRENDE SE EQUIVOCA ... PERO NO APRENDE
  #8 (permalink)  
Antiguo 17/05/2006, 21:25
Avatar de turco_7  
Fecha de Ingreso: diciembre-2003
Ubicación: Córdoba, Argentina
Mensajes: 1.044
Antigüedad: 14 años
Puntos: 19
Soy un .... entendi que querias sacar el ultimo ... no se como se hace pero esta me parece una solucion viable !!!
El proceso es el siguente ... me parece

*el usuario se logea
*Controlas que el usuario y la password sean validas
*Obtenes datos de la ultima sesion
*Actualizas los datos en la sesion de logeo
.... y lo que sigue ...

Osea lo que te quiero decir con eso es que antes de grabar en la tabla de user_log_id levantes los datos de la ultima sesion ....
y despues de esto insertas el registro con los datos actualizados ..
__________________
Mi Blog http://turco7.blogspot.com
Usuario Linux : 404289
Mi última página: http://www.digitalservicecba.com.ar - Reparacion de camaras digitales!
  #9 (permalink)  
Antiguo 17/05/2006, 21:28
Avatar de jpvilar  
Fecha de Ingreso: febrero-2005
Ubicación: Buenos Aires - Argentina
Mensajes: 128
Antigüedad: 12 años, 10 meses
Puntos: 1
Bueno ... de otra manera pero lo saqué ... te cuento

Modifiqué el código en el login y cargo el id del último insert en la tabla de logueos en la sesión ...

Código PHP:
// Acá van las validaciones

// Fin validaciones
mysql_query("insert into users_log set user_log_user='$mi[user_id]', user_log_fecha=NOW()");
$ultimo mysql_insert_id();
session_start();
$_SESSION['fecha_logueo'] = $ultimo;
header("Location: xxx");
exit; 
Después acomodé el código de antes en función a esta nueva variable ...

Código PHP:
$u mysql_query("select concat(users.user_nombre,' ',users.user_apellido)as nombre, DATE_FORMAT(users.user_fecha, '%d/%m/%Y')as fecha, DATE_FORMAT(users_log.user_log_fecha, '%d/%m/%Y')as fecha_ultima_visita, DATE_FORMAT(users_log.user_log_fecha, '%H:%i:%s')as hora_ultima_visita from users, users_log where users.user_id='$user' and users.user_id=users_log.user_log_user and users_log.user_log_id!='".$_SESSION['fecha_logueo']."' order by users_log.user_log_fecha desc");
$us mysql_fetch_array($u); 
... y ahí anduvo ... no muy ortodoxo pero anda ... si se te ocurre algo más por favor chiflame ... te estoy muy agradecido por la mano que me diste ...

Saludos
__________________
JuanP
QUIEN NO SE EQUIVOCA NO APRENDE ...
QUIEN NO APRENDE SE EQUIVOCA ... PERO NO APRENDE
  #10 (permalink)  
Antiguo 17/05/2006, 21:41
Avatar de turco_7  
Fecha de Ingreso: diciembre-2003
Ubicación: Córdoba, Argentina
Mensajes: 1.044
Antigüedad: 14 años
Puntos: 19
perdon por no interpretar bien lo que querias hacer ..

de todas formas ahi te mande un PM...

saludos
__________________
Mi Blog http://turco7.blogspot.com
Usuario Linux : 404289
Mi última página: http://www.digitalservicecba.com.ar - Reparacion de camaras digitales!
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 03:00.