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

como replantear esto con varias fechas

Estas en el tema de como replantear esto con varias fechas en el foro de Mysql en Foros del Web. Haber mi duda es que no tengo muy claro como hacerlo, se trata de unos perfiles que estan guardados en mi base de datos en ...
  #1 (permalink)  
Antiguo 18/07/2014, 09:05
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 13 años, 4 meses
Puntos: 10
como replantear esto con varias fechas

Haber mi duda es que no tengo muy claro como hacerlo, se trata de unos perfiles que estan guardados en mi base de datos en una tabla llamada perfil, donde los perfiles los muestro en pantalla segun la fecha mas reciente con un campo llamado fecha_visto, despues tengo otra tabla llamada visto donde dejo la oportunidad al perfil de subir mas fechas para que su perfil este el primero osea en un campo de fecha llamado igual que la otra tabla con el campo fecha_visto.

En resumen los perfiles se muestran segun su campo fecha_visto pero estas fechas se tienen que actualizar antes con la tabla visto, por si algun perfil tiene alguna fecha_visto que actualizar, las dos tablas serian algo asin:


perfil

id_perfil
nombre
fecha_visto


visto
id
id_perfil
fecha_visto

Pero no lo tengo muy claro que esto se hace asin ya que no se si se puede actualizar una tabla dependiendo de si hay registros y cumplen requisitos en otra, alguien me podria aconsejar como se deberia hacer esto?
saludos
  #2 (permalink)  
Antiguo 18/07/2014, 17:42
Avatar de Djoaq  
Fecha de Ingreso: septiembre-2012
Ubicación: Barcelona
Mensajes: 271
Antigüedad: 11 años, 7 meses
Puntos: 38
Respuesta: como replantear esto con varias fechas

Hola , te escribo desde el móvil! Una cosita espero que no te enfades, pero se dice así , no asin .

Dicho esto y sin ánimo de ofender, hay dos funciones que deberías comprobar para este tipo de situaciones :

Una el case para valores concretos :

Case nombrecampo

When "valor exacto" then "resultado"
End as "nombre de campo",

O usa ternarias para evaluar condiciones

Select if( campo de tu tabla = condición , si es verdadera muestra valor, si se falsa muestra otra cosa) as "nombre de campo".
Saludos!
  #3 (permalink)  
Antiguo 19/07/2014, 03:44
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 13 años, 4 meses
Puntos: 10
Respuesta: como replantear esto con varias fechas

Hola Djoaq, gracias por responder y perdona claro que es asi.
Volviendo al tema, tus soluciones no me sirven o almenos como lo estoy replanteando porque los perfiles los muestro segun la fecha_visto de la tabla perfiles y no todos los perfiles tienen nuevas fechas_visto en la tabla visto, creo que la unica solucion es actualizar la tabla perfiles en concreto el campo fecha_visto si en la tabla visto tenemos fechas_visto disponibles.

La consulta que necesito que no se si es posible seria, actualizar el campo fecha_visto de la tabla perfiles donde el id existe en la tabla visto y la fecha es mayor que la fecha de perfiles pero menor que la fecha actual.

Me pueden aclarar un poco como se deberia hacer?
saludos

Última edición por azaz; 19/07/2014 a las 03:59
  #4 (permalink)  
Antiguo 19/07/2014, 05:32
Avatar de Djoaq  
Fecha de Ingreso: septiembre-2012
Ubicación: Barcelona
Mensajes: 271
Antigüedad: 11 años, 7 meses
Puntos: 38
Respuesta: como replantear esto con varias fechas

Hola azaz!

A ver si lo entiendo bien , tu pretendes mostrar los perfiles por orden de fecha última visita?

Si es así tener dos tablas no tiene mucho sentido , a no ser que montes un sistema mas complejo que tenga en cuenta .. por ejemplo .. recurrencia de visitas , duración , etc..

Yo personalmente y buscando una solución sencilla ... usa una tabla perfiles por ejemplo ,
que cada vez que un usuario visite un perfil , haces un UPDATE del perfil que esta visitando usando la función mysql curdate().

Luego cuando se visualicen los perfiles, en tu SELECT simplemente haces un order By fecha_visto ASC y debería funcionarte siempre y cuando tengas los campos y las fechas bien formateados.

Otro tema sería unificar los datos de las tablas :

Código MySQL:
Ver original
  1. Select perfil.nombre , perfil.fecha_visto , visto.fecha_visto  where perfil.id_perfil = visto.id_perfil

Un saludo!
  #5 (permalink)  
Antiguo 19/07/2014, 06:21
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 13 años, 4 meses
Puntos: 10
Respuesta: como replantear esto con varias fechas

Hola Djoaq, lo entendistes mal o me explique fatal, necesito mostrar los perfiles por fecha mas reciente, pero no por ultima visita, es decir mostrar los perfiles con un ORDER BY DESC con el campo fecha_visto de la tabla perfiles, hasta aqui todo normal una consulta de selecion normal, pero tambien doy la oportunidad al perfil de asignar fechas para colocarlo en primer lugar su perfil que estas fechas las guardo en otra tabla llamada visto, que esta ultima tabla es la que tendria que comprobar sus valores para saber si tengo que actualizar el campo fecha_visto de los perfiles, es decir que si un perfil en concreto tiene fechas en la tabla visto y esta fecha es mayor que su fecha de pefil y menor que la fecha actual actualizar el campo fecha_visto de la tabla perfil, no se si te estare liando mas.
Como yo lo replanteo necesito dos tablas, como postee en el primer post, pero no se como tendria que actualizar las fechas de los perfiles dependiendo si tiene fechas pendientes en la tabla visto, igual repito que no se si esta es la mejor forma de hacerlo, cualquier ayuda me vendria bien.
saludos
  #6 (permalink)  
Antiguo 19/07/2014, 06:37
Avatar de Djoaq  
Fecha de Ingreso: septiembre-2012
Ubicación: Barcelona
Mensajes: 271
Antigüedad: 11 años, 7 meses
Puntos: 38
Respuesta: como replantear esto con varias fechas

Hola azaz ,

Cita:
Iniciado por azaz Ver Mensaje
pero tambien doy la oportunidad al perfil de asignar fechas para colocarlo en primer lugar
1 quieres controlar el numero de visitas que tiene un perfil .
2 Saber quien lo visita y en que fecha lo visita .
3 Mostrar resultados de estos perfiles en función de cantidad de visitas?

Sería esto?
  #7 (permalink)  
Antiguo 19/07/2014, 06:43
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 13 años, 4 meses
Puntos: 10
Respuesta: como replantear esto con varias fechas

Cita:
Iniciado por Djoaq Ver Mensaje
Hola azaz ,



1 quieres controlar el numero de visitas que tiene un perfil .
2 Saber quien lo visita y en que fecha lo visita .
3 Mostrar resultados de estos perfiles en función de cantidad de visitas?

Sería esto?
Hola ninguna de las 3

Solo es para que su perfil este el primero en pantalla, dependiendo de la fecha da igual si tiene muchas o ninguna visita, solo teniendo en cuenta la fecha_visto, quizas te estoy liando con el nombre del campo, fecha_visto no tiene nada que ver con las visitas, si no con que sera visto el primero nada mas, pero como digo el perfil puede tener fechas pendientes para que su perfil se vea el primero cuando el lo quiero por ejemplo en año nuevo del 2015, pero para esto tengo que actualizar la tabla perfil, comprobando que la fecha de tabla visto es mayor que la fecha que tiene el perfil en ese momento pero menor que la fecha actual.

Djoaq, se que me quieres ayudar y te lo agradezco espero que ahora se entienda mas mi problema.
Salduos
  #8 (permalink)  
Antiguo 19/07/2014, 07:11
Avatar de Djoaq  
Fecha de Ingreso: septiembre-2012
Ubicación: Barcelona
Mensajes: 271
Antigüedad: 11 años, 7 meses
Puntos: 38
Respuesta: como replantear esto con varias fechas

Cita:
Iniciado por azaz Ver Mensaje
Hola ninguna de las 3
comprobando que la fecha de tabla visto es mayor que la fecha que tiene el perfil en ese momento pero menor que la fecha actual.
Voy entendiendo , es algo lioso .. y estoy de sábado .. te pongo yo como interpreto tu frase literalmente y así vas teniendo algún ejemplo que se vaya pareciendo a lo que buscas!

Código MySQL:
Ver original
  1. UPDATE tabla_perfil a SET a.fecha_perfil = (SELECT b.fecha_visto FROM visto b WHERE b.id = a.id  AND b.fecha_visto > a.fecha_perfil AND b.fecha_visto < CURDATE())
  #9 (permalink)  
Antiguo 19/07/2014, 07:21
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 13 años, 4 meses
Puntos: 10
Respuesta: como replantear esto con varias fechas

Cita:
Iniciado por Djoaq Ver Mensaje
Voy entendiendo , es algo lioso .. y estoy de sábado .. te pongo yo como interpreto tu frase literalmente y así vas teniendo algún ejemplo que se vaya pareciendo a lo que buscas!

Código MySQL:
Ver original
  1. UPDATE tabla_perfil a SET a.fecha_perfil = (SELECT b.fecha_visto FROM visto b WHERE b.id = a.id  AND b.fecha_visto > a.fecha_perfil AND b.fecha_visto < CURDATE())
Ahora creo que si, pero tengo una duda, si en la tabla visto no tenemos registros osea que no se tendria que actualizar nada, que pasaria creo que me pondria el campo fecha a 0 o algo asin, estoy en lo cierto o me equivoco, ya que no siempre tiene que actualizar.
saludos.
  #10 (permalink)  
Antiguo 19/07/2014, 07:57
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 13 años, 4 meses
Puntos: 10
Respuesta: como replantear esto con varias fechas

Lo comprobe y efectivamente la consulta hace lo que me esperaba si el select no cumple la condicion me lo actualiza a 0, tambien me actualiza todos los perfiles y estas dos cosas son las que quiero evitar, osea que solo me actualice los perfiles que tengan un registro en la tabla visto cuyo registro cumple estos requisitos osea mayor que fecha_visto y menor que la fecha actual sin tener que actualizar todos los registros, es decir que si solo tengo un registro en la tabla visto o incluso ninguno que solo me actualice un registro de la tabla perfil o incluso ninguna.
Saludos.
  #11 (permalink)  
Antiguo 19/07/2014, 08:28
Avatar de Djoaq  
Fecha de Ingreso: septiembre-2012
Ubicación: Barcelona
Mensajes: 271
Antigüedad: 11 años, 7 meses
Puntos: 38
Respuesta: como replantear esto con varias fechas

Creo que con alguna ternaria y algún condicional mas podríamos conseguir q escriba la misma fecha, nos vamos acercando! :)
Ten cuenta que no puedes hacer dml usando selects internamente sql no lo contempla por que puedes alterar los resultados que vas a insertar después .

Con lo que siempre que hagas un update recorrerá toda la tabla .

Lo que para mejorar la eficiencia , se me ocurre recurrir p ejemplo a php que haga una consulta y si procede que dispare el insert y si no te lo ahorras.

Ahora voy a hecharme una siesta y mas tarde me lo miro!
Saludos!
  #12 (permalink)  
Antiguo 20/07/2014, 04:54
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 13 años, 4 meses
Puntos: 10
Respuesta: como replantear esto con varias fechas

Con lo que dices se me ocurre estos tres pasos:

1-compruebo en la tabla visto las fechas que cumplan los requisitos, osea menor que la fecha actual y mayor que la fecha_visto de la tabla perfiles.
(con un lenguaje del lado del servidor guardo las fechas e id)

2-Si hay fechas disponibles actualizo la tabla perfiles solo los perfiles que queremos.

3-mostrar los perfiles tengan o no actualizaciones.

En el primer paso no se como hacer la consulta, ya que los identificadores se pueden repetir y yo necesito la fecha mas reciente, me podrias ayudar con esa consulta?

O si tienes un replanteamiento mejor y me quieres ayudar.
saludos
  #13 (permalink)  
Antiguo 20/07/2014, 15:22
Avatar de Djoaq  
Fecha de Ingreso: septiembre-2012
Ubicación: Barcelona
Mensajes: 271
Antigüedad: 11 años, 7 meses
Puntos: 38
Respuesta: como replantear esto con varias fechas

Código MySQL:
Ver original
  1. SELECT b.fecha_visto FROM visto b,perfiles a WHERE b.id = a.id  AND b.fecha_visto > a.fecha_perfil AND b.fecha_visto < CURDATE()
  #14 (permalink)  
Antiguo 20/07/2014, 15:37
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 13 años, 4 meses
Puntos: 10
Respuesta: como replantear esto con varias fechas

Hola Djoaq, en realidad no uso tablas relacionales uso myIsam entonces tengo que usar join, de todas formas el problema que tengo es el mismo me explico, con esta consulta me podría recuperar dos fechas con el mismo id_perfil ya que dejó la oportunidad de tener varias fechas, entonces solo necesito una fecha por id osea la más reciente.
No se si se entiende el problema y si esto es posible con una sola consulta.
Saludos.

Etiquetas: campo, 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 12:18.