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

como ordenar los registros segun el valor de tres campos

Estas en el tema de como ordenar los registros segun el valor de tres campos en el foro de Mysql en Foros del Web. Hola, le estoy dando vueltas al asunto pero no encuentro la manera de solucionar mi problema, no se si es posible solucionarlo con una consulta ...
  #1 (permalink)  
Antiguo 30/04/2012, 11:58
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
como ordenar los registros segun el valor de tres campos

Hola, le estoy dando vueltas al asunto pero no encuentro la manera de solucionar mi problema, no se si es posible solucionarlo con una consulta sql o necesitaria algun lenguaje del lado del servidor, os comento teniendo una tabla asin:


id orden1 orden2 orden3
1--3-----33------54
2--44----22-----43
3--3-----33------54
4--46----72-----823
5--33-----33------524
6--424----212-----423


es posible crear un un select elijiendo de los tres campos orden, orden2, orden3, el numero mas alto de estos tres campos y de forma descendiente mostrar en pantalla el id de cada registro, no se si esto es posible con una sola consulta o necesitaria tambien usar un lenguaje como php, gracias de antemano, saludos.
  #2 (permalink)  
Antiguo 30/04/2012, 16:00
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: como ordenar los registros segun el valor de tres campos

Prueba esto:
SELECT id, GREATEST(orden1,orden2,orden3) valormaximo FROM nombretutabla ORDER BY valormaximo DESC
  #3 (permalink)  
Antiguo 01/05/2012, 03:16
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 12 años, 11 meses
Puntos: 10
Respuesta: como ordenar los registros segun el valor de tres campos

como se podria hacer esto trabajando con fechas? algo como que te los ordene de mayor a menor segun las fechas pero que no sobre pasen de la fecha actual.
  #4 (permalink)  
Antiguo 01/05/2012, 04:00
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: como ordenar los registros segun el valor de tres campos

pithon,
por favor, ejemplifica con datos lo que tienes, cómo lo tienes y cómo quieres que salga.
Entiendo que tienes tres campos de fecha en cada registro y quieres que te saque la fecha más reciente de las tres sin sobrepasar una determinada fecha que es la actual? Es decir, que si la más alta sobrepasa la fecha actual, debería sacar la segunda más alta, si es que no la sobrepasa. ¿Es así? ¿Y si las tre sobrepasan la fecha actual, qué quieres que salga?
  #5 (permalink)  
Antiguo 01/05/2012, 15:25
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 12 años, 11 meses
Puntos: 10
Respuesta: como ordenar los registros segun el valor de tres campos

Hola jurena, eso mismo es lo que tengo y quiero, osea tengo tres campos con diferentes fechas pero un campo siempre tendra por defecto una fecha inferior a la actual, en el caso de que los demas campos superen la actual fecha utilizar esa fecha que tengo por defecto.
Entonces una vez se tenga selecionado la fecha mayor sin sobrepasar la actual, como seria para mostrar en pantalla los registros ordenandolos de las fechas mas recientes a las mas antiguas, espero haber explicado bien, gracias y saludos.
  #6 (permalink)  
Antiguo 01/05/2012, 15:46
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: como ordenar los registros segun el valor de tres campos

Se me ocurre esto (he llamado fecha1, fecha2 y fecha3 a esos campos:
select greatest(if (DATEDIFF(fecha1, CURDATE()) < 0, fecha1, '0000-00-00'), if (DATEDIFF(fecha2, CURDATE()) < 0, fecha2, '0000-00-00'), if (DATEDIFF(fecha3, CURDATE()) < 0, fecha3, '0000-00-00')) fechamasalta FROM tutabla ORDER BY fechamasalta DESC
  #7 (permalink)  
Antiguo 02/05/2012, 07:56
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 12 años, 11 meses
Puntos: 10
Respuesta: como ordenar los registros segun el valor de tres campos

jurena tengo una duda, de donde sacas fechamasalta no se muy bien si se crea en la misma consulta, si me lo pudieras aclarar, saludos.
  #8 (permalink)  
Antiguo 02/05/2012, 09:49
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: como ordenar los registros segun el valor de tres campos

Es el alias que jurena le pone a la columna resultado de las funciones usadas.
Si no le pusieras un alias, sería difícil invocarla para realizar el ORDER BY.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 03/05/2012, 07:12
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 12 años, 11 meses
Puntos: 10
Respuesta: como ordenar los registros segun el valor de tres campos

Hola gnzsoloyo, muchas gracias por tu aclaracion, ahora si que lo tengo mas claro, un saludo.
  #10 (permalink)  
Antiguo 03/05/2012, 09:06
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 12 años, 11 meses
Puntos: 10
Respuesta: como ordenar los registros segun el valor de tres campos

perdonar que este otra vez aqui,pero la verdad que no consigo adaptar la consulta a lo que quiero, os comento, segun la consulta que indico jurema, para una tabla con esos campos osea fecha1, fecha2 y fecha3, todo funciona bien pero si por ejemplo mi tabla contiene mas datos como un id y pais, como deberia hacer la consulta para que me muestre en pantalla el id y el pais ordenados por la fecha mas alta, no se si me explique bien yo probe algo asin:

Código MySQL:
Ver original
  1. select  id, pais, greatest(if (DATEDIFF(fecha1, CURDATE()) < 0, fecha1, '0000-00-00'), if (DATEDIFF(fecha2, CURDATE()) < 0, fecha2, '0000-00-00'), if (DATEDIFF(fecha3, CURDATE()) < 0, fecha3, '0000-00-00')) fechamasalta FROM tutabla ORDER BY fechamasalta DESC

pero esto no me muestra el id pais que corresponde con su orden de fecha mas alta, me ayudan a solventar mi problema?
Un saludo.
  #11 (permalink)  
Antiguo 03/05/2012, 09:47
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: como ordenar los registros segun el valor de tres campos

SELECT id, pais, greatest(if (DATEDIFF(fecha1, CURDATE()) < 0, fecha1, '0000-00-00'), if (DATEDIFF(fecha2, CURDATE()) < 0, fecha2, '0000-00-00'), if (DATEDIFF(fecha3, CURDATE()) < 0, fecha3, '0000-00-00')) fechamasalta FROM tutabla ORDER BY fechamasalta DESC

No entiendo bien lo que te ocurre, pues a mí me lo muestra con esa consulta, pero claro, los campos deben existir en esa tabla que habrás creado y llamado tutabla.
  #12 (permalink)  
Antiguo 03/05/2012, 10:17
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 12 años, 11 meses
Puntos: 10
Respuesta: como ordenar los registros segun el valor de tres campos

Hola jurena, no se que paso volvi a probar y ahora si me funciona, antes no me ordeno el id pero ahora si, no se, bueno la cuestion es que ahora si funciona, muchas gracias nuevamente, un saludo.
  #13 (permalink)  
Antiguo 03/05/2012, 10:29
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 12 años, 11 meses
Puntos: 10
Respuesta: como ordenar los registros segun el valor de tres campos

Ahora veo otro otro detalle en mi consulta que no hace lo que yo esperaba, os comento por si quereis ayudarme, en el campo fecha1, fecha2 y fecha3, si una de las fechas de estos tres campos, es mayor que la fecha actual ya no me muestra el registro pero realmente lo que quedria que hiciera la consulta, seria que si un campo de estos tres la fecha es mayor que la actual, que comprobara los otros dos campos, por si uno de ellos la fecha, es menor que la actual entonces si me lo mostrara, no se si os estoy liando, en resumen tiene que tener en cuenta para mostrar los registros que en uno de los campos la fecha es menor o igual que la actual, esto es posible hacerlo con una sola consulta, si es posible espero ayuda, saludos.
  #14 (permalink)  
Antiguo 03/05/2012, 10:40
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 12 años, 11 meses
Puntos: 10
Respuesta: como ordenar los registros segun el valor de tres campos

perdonar, si que funciona como necesitaba, mil perdon y mil gracias.

Última edición por pithon; 03/05/2012 a las 10:53
  #15 (permalink)  
Antiguo 01/06/2012, 07:19
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: como ordenar los registros segun el valor de tres campos

Perdonar que vuelva al post, estoy intentando modificar la consulta selefcionando todos los registros de la tabla y añadiendole un where pero no me funciona hice algo asin:

SELECT * from tutabla where condicion=2, greatest(if (DATEDIFF(fecha1, CURDATE()) < 0, fecha1, '0000-00-00'), if (DATEDIFF(fecha2, CURDATE()) < 0, fecha2, '0000-00-00'), if (DATEDIFF(fecha3, CURDATE()) < 0, fecha3, '0000-00-00')) fechamasalta FROM tutabla ORDER BY fechamasalta DESC

Si alguien me quiere corregir mil gracias de antemano, saludos.
  #16 (permalink)  
Antiguo 01/06/2012, 10:31
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: como ordenar los registros segun el valor de tres campos

Intento solucionar mi problema pero resulta que me salen otros os comento lo que es por si quereis ayudarme, resulta que tengo que trabajar con fechas y horas para que mi consulta funcione correctamente pero claro si cambio el curdate() por un now(), sigue sin funcionarme porque el datediff() devuelve la diferencia de dias sin tener en cuenta las horas yo yo necesito la fecha con hora incluida, bueno espero que me puedan ayudar ya que estoy un poco saturado, un saludo.
  #17 (permalink)  
Antiguo 01/06/2012, 10:53
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: como ordenar los registros segun el valor de tres campos

Cita:
Iniciado por roboty Ver Mensaje
Perdonar que vuelva al post, estoy intentando modificar la consulta selefcionando todos los registros de la tabla y añadiendole un where pero no me funciona hice algo asin:

SELECT * from tutabla where condicion=2, greatest(if (DATEDIFF(fecha1, CURDATE()) < 0, fecha1, '0000-00-00'), if (DATEDIFF(fecha2, CURDATE()) < 0, fecha2, '0000-00-00'), if (DATEDIFF(fecha3, CURDATE()) < 0, fecha3, '0000-00-00')) fechamasalta FROM tutabla ORDER BY fechamasalta DESC

Si alguien me quiere corregir mil gracias de antemano, saludos.
Es que en realidad estás poniendo cualquier cosa en esa consulta...
Código MySQL:
Ver original
  1. from tutabla
  2.     condicion=2,
  3.         greatest(
  4.                 if (DATEDIFF(fecha1, CURDATE()) < 0, fecha1, '0000-00-00'),
  5.                 if (DATEDIFF(fecha2, CURDATE()) < 0, fecha2, '0000-00-00'),
  6.                 if (DATEDIFF(fecha3, CURDATE()) < 0, fecha3, '0000-00-00')
  7.                 ) fechamasalta
  8. FROM tutabla
  9. ORDER BY fechamasalta DESC

Como puedes ver, pones un WHERE antes de un FROM y estás poniendo dos FROM... Eso no es SQL.
En todo caso, si lo que quieres es esa data, sería mas o menos:
Código MySQL:
Ver original
  1.     T.*,
  2.     greatest(
  3.                 if (DATEDIFF(fecha1, CURDATE()) < 0, fecha1, '0000-00-00'),
  4.                 if (DATEDIFF(fecha2, CURDATE()) < 0, fecha2, '0000-00-00'),
  5.                 if (DATEDIFF(fecha3, CURDATE()) < 0, fecha3, '0000-00-00')
  6.                 ) fechamasalta
  7. FROM tutabla
  8.     condicion = 2
  9. ORDER BY fechamasalta DESC

Trata siempre de escribir tus consultas de una forma estructurada como la que te muestro. Eso ayuda a que sea más comprensible, y también a detectar fácilmente los errores.
Jamás la escribas toda continuada.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #18 (permalink)  
Antiguo 01/06/2012, 11:25
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: como ordenar los registros segun el valor de tres campos

Hola gnzsoloyo, gracias por tu colaboracion y consejos te hare caso, referente a la consulta estoy teniendo otro problema, es el siguiente estoy trabajando con fechas y horas entonces esa consulta no me vale porque no los ordena dependiendo tambien de la hora, y no encuentro como solucionar mi problema, saludos.
  #19 (permalink)  
Antiguo 01/06/2012, 12: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: como ordenar los registros segun el valor de tres campos

Si lo que quieres es eliminar la hora y que sólo considere la fecha, simplemente aplica la función DATE() sobre el campo en cuestión.
Por ejemplo:
Código MySQL:
Ver original
  1.     T.*,
  2.     greatest(
  3.                 if (DATEDIFF(DATE(fecha1), CURDATE()) < 0, fecha1, '0000-00-00'),
  4.                 if (DATEDIFF(DATE(fecha2), CURDATE()) < 0, fecha2, '0000-00-00'),
  5.                 if (DATEDIFF(DATE(fecha3), CURDATE()) < 0, fecha3, '0000-00-00')
  6.                 ) fechamasalta
  7. FROM tutabla
  8.     condicion = 2
  9. ORDER BY fechamasalta DESC
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #20 (permalink)  
Antiguo 01/06/2012, 16:31
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: como ordenar los registros segun el valor de tres campos

Hola gnzsoloyo, lo primero que mil gracias por tu paciencia, referente a mi problema me referia que necesito trabajar tambien con horas , osea que necesito comparar las fechas en este formato 0000-00-00 00:00:00, y claro la funcion curdate() me devuelve fecha solo, aparte creo haber entendido que DATEDIFF devuelve los dias de diferencia pero claro este es mi problema que pueden ser fechas del mismo dia pero cambian la hora, como lo podria solucionar, saludos.
  #21 (permalink)  
Antiguo 01/06/2012, 17:31
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: como ordenar los registros segun el valor de tres campos

maestro ya lo solucione cambie la funcion curdate() por now(), gracias por toda tu ayuda hoy mismo me voy a poner a leerme el manual de mysql ya que es muy interesante aprenderlo, saludos.
  #22 (permalink)  
Antiguo 21/06/2012, 07:38
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: como ordenar los registros segun el valor de tres campos

Hola perdonar que vuelva a este tema pero resulta que esta forma de hacer la consulta no me sirve ya que la funcion DATEDIFF devuelve la diferencia de dias y yo quiero que tenga en cuenta las horas porque pueden haber dos fechas del mismo dia pero diferentes horas, alguna solucion de como lo puedo hacer, saludos.
  #23 (permalink)  
Antiguo 21/06/2012, 08:15
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: como ordenar los registros segun el valor de tres campos

TIMESTAMDIFF() considera hasta los segundos.

Código MySQL:
Ver original
  1. TIMESTAMPDIFF(DAY, fecha1, fecha2)
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #24 (permalink)  
Antiguo 21/06/2012, 09:30
 
Fecha de Ingreso: abril-2011
Mensajes: 867
Antigüedad: 13 años
Puntos: 5
Respuesta: como ordenar los registros segun el valor de tres campos

Hola gnzsoloyo, mil gracias nuevamente por enseñarme esa funcion, le pase como unidad los segundo y listo, un saludo.
  #25 (permalink)  
Antiguo 21/06/2012, 09:46
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: como ordenar los registros segun el valor de tres campos

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: campos, php, registros, select, sql, tabla, tres
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 13:03.