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

Problema en un SELECT con LIMIT y ORDER

Estas en el tema de Problema en un SELECT con LIMIT y ORDER en el foro de Mysql en Foros del Web. Tengo esta tabla: CREATE TABLE `partes` ( `id_partes` int(11) NOT NULL AUTO_INCREMENT, `id_usuario` int(11) NOT NULL DEFAULT '0', `fecha` date DEFAULT NULL PRIMARY KEY (`id_partes`), ...
  #1 (permalink)  
Antiguo 24/02/2009, 03:54
 
Fecha de Ingreso: junio-2003
Ubicación: Granada
Mensajes: 27
Antigüedad: 21 años, 5 meses
Puntos: 1
Problema en un SELECT con LIMIT y ORDER

Tengo esta tabla:

CREATE TABLE `partes` (
`id_partes` int(11) NOT NULL AUTO_INCREMENT,
`id_usuario` int(11) NOT NULL DEFAULT '0',
`fecha` date DEFAULT NULL
PRIMARY KEY (`id_partes`),
KEY `fecha` (`fecha`),
KEY `id_usuario` (`id_usuario`)
) ENGINE=MyISAM

Con estos datos:

INSERT INTO `partes` (`id_partes`, `id_usuario`, `fecha`) VALUES
(1,29,'2009-01-05'),
(2,29,'2009-01-06'),
(3,29,'2009-01-07'),
(4,29,'2009-01-08'),
(5,29,'2009-01-09'),
(6,29,'2009-01-10'),
(7,29,'2009-01-11'),
(8,29,'2009-01-12'),
(9,29,'2009-01-13');

Intento hacer este SELECT para que me devuelva el primer registro del usuario 29 que este entre estas fechas '2009-01-05' AND '2009-07-05'

SELECT id_partes, fecha, id_usuario
FROM partes
WHERE (id_usuario=29 AND fecha BETWEEN '2009-01-05' AND '2009-07-05')
ORDER BY fecha LIMIT 1

No devuelve nada. Si cambio el valor del LIMIT a 3 si funciona, pero me devuelve 3 registros y solo necesito 1 (esa es una solución, bastaría con leer un registro)

SELECT id_partes, fecha, id_usuario
FROM partes
WHERE (id_usuario=29 AND fecha BETWEEN '2009-01-05' AND '2009-07-05')
ORDER BY fecha LIMIT 3

Si cambio el campo que uso en el ORDER BY por id_partes, tambien funciona pero esto no me vale ya que necesito el orden por fecha.

Hablando con un compañero hemos encontrado este solución:

SELECT * FROM
(SELECT id_partes, fecha, id_usuario
FROM partes
WHERE (id_usuario=29 AND fecha BETWEEN '2009-01-05' AND '2009-07-05') ORDER BY fecha) AS tbltempo
LIMIT 1

Usando 2 consultas, pero no me gusta.

¿Porqué pasa esto? ¿Alguna solución para obtener el primer registro de una tabla entre 2 fechas y ordenado por la fecha?

Gracias.
  #2 (permalink)  
Antiguo 24/02/2009, 05:18
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Problema en un SELECT con LIMIT y ORDER

He probado tu modelo y los datos del mismo (haciendo la salvedad de haber eliminado un campo en el INSERT, porque siendo AUTO_ICREMENT no es necesario ponerlo).
Las sentencias han sido así:
Código sql:
Ver original
  1. CREATE TABLE `partes` (
  2. `id_partes` INT(11) NOT NULL AUTO_INCREMENT,
  3. `id_usuario` INT(11) NOT NULL DEFAULT '0',
  4. `fecha` DATE DEFAULT NULL,
  5. PRIMARY KEY (`id_partes`),
  6. KEY `fecha` (`fecha`),
  7. KEY `id_usuario` (`id_usuario`)
  8. ) ENGINE=MyISAM;
Código sql:
Ver original
  1. INSERT INTO `partes` (`id_usuario`, `fecha`) VALUES
  2. (29,'2009-01-05'),
  3. (29,'2009-01-06'),
  4. (29,'2009-01-07'),
  5. (29,'2009-01-08'),
  6. (29,'2009-01-09'),
  7. (29,'2009-01-10'),
  8. (29,'2009-01-11'),
  9. (29,'2009-01-12'),
  10. (29,'2009-01-13');
Código sql:
Ver original
  1. SELECT id_partes, fecha, id_usuario
  2. FROM partes
  3. WHERE (id_usuario=29 AND fecha BETWEEN '2009-01-05' AND '2009-07-05')
  4. ORDER BY fecha LIMIT 1;
El resultado de la última ha sido correcto y los datos son los esperados (después de haber resuelto un problema de sintaxis que tenía el código que enviaste pues la línea del campo FECHA estaba sin la coma final).

En principio, la sentencia debería funcionar correctamente, ya que los datos devueltos se ajustan a lo que deseas (un solo registro). La única cosa que me quedaría por resolver sería saber si hay algún problema con la versión de MySQL que estás usando en la prueba y que no nos has indicado.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 24/02/2009, 05:54
 
Fecha de Ingreso: junio-2003
Ubicación: Granada
Mensajes: 27
Antigüedad: 21 años, 5 meses
Puntos: 1
Respuesta: Problema en un SELECT con LIMIT y ORDER

He ejecutado tu SELECT por si tenia algo mal escrito y no me ha dado ningún registro. ¿¿¿Y a ti te funciona???

La version del MySQL es 5.1.23-rc-community corriendo sobre Windows. Para obtener la versión he usado:

SELECT VERSION();

Un saludo.
  #4 (permalink)  
Antiguo 24/02/2009, 10:05
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Problema en un SELECT con LIMIT y ORDER

El SELECT mío y el tuyo son iguales. Pensé que lo notaste.
El problema puede estar en la definición de la tabla o en las inserciones.
Mi sugerencia es que ejecutes todo el proceso, con la creación de la tabla incluida.
Además de eso, habría que comprobar el cambio de versiones.

Una pregunta final: ¿Qué estás usando para ejecutar estas sentencias?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 24/02/2009 a las 10:20
  #5 (permalink)  
Antiguo 24/02/2009, 10:40
 
Fecha de Ingreso: junio-2003
Ubicación: Granada
Mensajes: 27
Antigüedad: 21 años, 5 meses
Puntos: 1
Respuesta: Problema en un SELECT con LIMIT y ORDER

Tenias razón.

Lo he probado en otra version de MySQL y funciona perfectamente.

Siento las molestias y muchas gracias.
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:53.