Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Comparar dos registros de una misma tabla

Estas en el tema de Comparar dos registros de una misma tabla en el foro de Mysql en Foros del Web. Hola, tengo una tabla donde guardo el historial de movimientos de un apunte: id idApunte tipoOperacion venta rebooking cash CC TPV idAgenteModificacion fechaModificacion En esta ...
  #1 (permalink)  
Antiguo 26/12/2013, 01:04
 
Fecha de Ingreso: julio-2005
Mensajes: 110
Antigüedad: 18 años, 9 meses
Puntos: 1
Comparar dos registros de una misma tabla

Hola,
tengo una tabla donde guardo el historial de movimientos de un apunte:

id
idApunte
tipoOperacion
venta
rebooking
cash
CC
TPV
idAgenteModificacion
fechaModificacion

En esta tabla guardo los cambios realizados para saber quién a cambiado qué. El caso es que quisiera saber si existe alguna forma de poder crear una SQL para poder saber cual ha sido el cambio realizado respecto al apunte modificado anterior y no tener que liarme con código php.

Un ejemplo de dos registros sería:
id=1
idApunte=1
tipoOperacion=venta
venta=100,5
rebooking=0
cash=80
CC=20,5
TPV=0
idAgenteModificacion=4
fechaModificacion='2013-05-24'

id=2
idApunte=1
tipoOperacion=venta
venta=80,5
rebooking=0
cash=60
CC=20,5
TPV=0
idAgenteModificacion=4
fechaModificacion='2013-05-24'

De aquí quisiera obtener en una SQL que lo que se ha modificado ha sido sólo que la venta era de 80,5 y que el cash=60

Un saludo y gracias,
  #2 (permalink)  
Antiguo 27/12/2013, 10:58
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Comparar dos registros de una misma tabla

Complicado, que querrias saber en este caso

id=1
idApunte=1
tipoOperacion=venta
venta=100,5
rebooking=0
cash=80
CC=20,5
TPV=0
idAgenteModificacion=4
fechaModificacion='2013-05-24'

id=2
idApunte=1
tipoOperacion=venta
venta=80,5
rebooking=0
cash=60
CC=20,5
TPV=0
idAgenteModificacion=4
fechaModificacion='2013-05-24'

id=3
idApunte=1
tipoOperacion=venta
venta=80,5
rebooking=0
cash=60
CC=20,5
TPV=1
idAgenteModificacion=5
fechaModificacion='2013-05-24'


Y si hay 5 registros mas?


Código MySQL:
Ver original
  1. SELECT * FROM tbHistorial WHERE idApunte=X ORDER BY id;

Esto te da el historial del apunte X lo mejor es que lo trates con programación externa....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 27/12/2013, 11:08
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Comparar dos registros de una misma tabla

Hagamos un experimento:
Código MySQL:
Ver original
  1.   t1.idApunte,
  2.   IF(t1.tipoOperacion= t2.tipoOperacion, '', 'Modificado') tipoOperacion,
  3.   IF(t1.venta= t2.venta, '', 'Modificado') venta,
  4.   IF(t1.rebooking= t2.rebooking, '', 'Modificado') rebooking,
  5.   IF(t1.cash= t2.cash, '', 'Modificado') cash,
  6.   IF(t1.CC= t2.CC, '', 'Modificado') CC,
  7.   IF(t1.idAgenteModificacion= t2.idAgenteModificacion, '', 'Modificado') idAgenteModificacion,
  8.   t1. fechaModificacion
  9. FROM tbHistorial t1 INNER JOIN tbHistorial t2 ON (t1.id+1) = t2.id AND t1.idApunte = t2.idApunte
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 27/12/2013, 13:00
 
Fecha de Ingreso: febrero-2013
Mensajes: 115
Antigüedad: 11 años, 2 meses
Puntos: 5
Respuesta: Comparar dos registros de una misma tabla

yo creo que deberia pasar el id del registro anterior... lo que quiere decir que en la tabla tendras que poner una nueva columna para que cuando cambies algo el id del cambio anterior se guarde alli en ese nuevo... y asi puedas compararlos..

digamos tienes estos
id=1
idAnterior=null
idApunte=1
tipoOperacion=venta
venta=100,5
rebooking=0
cash=80
CC=20,5
TPV=0
idAgenteModificacion=4
fechaModificacion='2013-05-24'

id=2
idAnterior=1
idApunte=1
tipoOperacion=venta
venta=80,5
rebooking=0
cash=60
CC=20,5
TPV=0
idAgenteModificacion=4
fechaModificacion='2013-05-24'

de esta forma buscarias con ese id el estado anterior y sabrias que fue lo que se ha cambiado... luego el resto es php... y ya!!! podrias hacer una tabla de antes y desues y mostrar cada uno de los datos que quires que se vea... y ya!!! eso es todo... saludos.. espero que te sirva lo que te aconsejo
__________________
http://tutorialesdelweb.blogspot.com/TutorialesWeb(principiantes)
  #5 (permalink)  
Antiguo 27/12/2013, 13:09
 
Fecha de Ingreso: julio-2005
Mensajes: 110
Antigüedad: 18 años, 9 meses
Puntos: 1
Respuesta: Comparar dos registros de una misma tabla

Gracias a todos por responder.
Realmente el campo idAnterior no lo necesito ya que el campo fecha realmente es un DATETIME por lo que ordenando por fecha DESC obtengo el anterior.
Probaré la sql que me aconseja gnzsoloyo aunque no se si funcionará hacer un inner join sobre la misma tabla...

Cita:
Iniciado por horusorion Ver Mensaje
yo creo que deberia pasar el id del registro anterior... lo que quiere decir que en la tabla tendras que poner una nueva columna para que cuando cambies algo el id del cambio anterior se guarde alli en ese nuevo... y asi puedas compararlos..

digamos tienes estos
id=1
idAnterior=null
idApunte=1
tipoOperacion=venta
venta=100,5
rebooking=0
cash=80
CC=20,5
TPV=0
idAgenteModificacion=4
fechaModificacion='2013-05-24'

id=2
idAnterior=1
idApunte=1
tipoOperacion=venta
venta=80,5
rebooking=0
cash=60
CC=20,5
TPV=0
idAgenteModificacion=4
fechaModificacion='2013-05-24'

de esta forma buscarias con ese id el estado anterior y sabrias que fue lo que se ha cambiado... luego el resto es php... y ya!!! podrias hacer una tabla de antes y desues y mostrar cada uno de los datos que quires que se vea... y ya!!! eso es todo... saludos.. espero que te sirva lo que te aconsejo

Etiquetas: php, registro, registros, sql, tabla
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 08:53.