Título: Extraño: select con offset y limit devuelve datos duplicados Publicado por: Filantropo en 6 Diciembre 2020, 02:18 am Holas.
Tengo una tabla cliente: Código: create table cliente ( Las inserciones son mediante SP_CLIENTE_INSERTAR Código: CREATE PROCEDURE SP_CLIENTE_INSERTAR( SP_CLIENTE_BUSCAR realiza busquedas por nombre o apellido, ademas se le pasa un offset y limit para devolver solo una porcion de la busqueda y mostrarlo en forma de paginacion. Código: CREATE PROCEDURE SP_CLIENTE_BUSCAR(in arg_cadena varchar(50), Inserte 12 clientes en un sola ejecucion y en la bd se insertaron todos con igual fecha_insercion como es d esperar: Código: Id nombre fecha_insercion otros_campos....... el problema es que el SP_CLIENTE_BUSCAR devuelve registros duplicados y en orden inverso durante la paginacion, ademas que se omite 4 o 5 de los 12 registros. Lo que me devuelve el sp_cliente_buscar: Código: paginacion se realiza por cada 5 registros: Alguien sabra por que ocurre esto, esta mal mi codigo o esta fallando el servidor? Edicion: Hay otra tabla llamada empleados es casi igual a la de clientes la unica diferencia es: tiene 3 campos adicionales, su proc almacenado de busqueda SP_EMPLEADO_BUSCAR es igual al del cliente, pero este si funciona correctamente. Edicion 2 Olvide decir que los resultados mostrados son de una busqueda sin ningun texto. internamente la ejecucion seria asi: Código: call SP_CLIENTE_BUSCAR ('',0,5) <-----PAG 1 Deberia mostrar todos los registros (12 total) divididos en: pag1 y pag2 cada uno con 5 registros y por ultimo pag3 con 2 registros, a diferencia de SP_EMPLEADO_BUSCAR que siendo casi lo mismo Si trabaja como se espera. Tambien es extraño que si se le pasa offset 0 y un limit alto me devuelve ahora si la lista completa de 12 sin duplicados. call SP_CLIENTE_BUSCAR ('',0,5) <-----PAG 1 (https://i.postimg.cc/r0MVTNcG/0-5.png) (https://postimg.cc/r0MVTNcG) call SP_CLIENTE_BUSCAR ('',5,5) <-----PAG 2 (https://i.postimg.cc/LgsmY4Jn/5-5.png) (https://postimg.cc/LgsmY4Jn) call SP_CLIENTE_BUSCAR ('',10,5) <-----PAG 3 (https://i.postimg.cc/8skpn4ZN/10-5.png) (https://postimg.cc/8skpn4ZN) call SP_CLIENTE_BUSCAR ('',0,9999999) (https://i.postimg.cc/47PJxHND/0-9999999.png) (https://postimg.cc/47PJxHND) Lista completa clientes (https://i.postimg.cc/DmCvVGNs/SELECT.png) (https://postimg.cc/DmCvVGNs) En la captura los nombres: patricia, melisa, julio, marleni, eduardo son los que se repiten y en orden inverso. Estoy mal o el servidor esta medio loco? Título: Re: Extraño: select con offset y limit devuelve datos duplicados Publicado por: K-YreX en 6 Diciembre 2020, 02:45 am el problema es que el SP_CLIENTE_BUSCAR devuelve registros duplicados y en orden inverso durante la paginacion, ademas que se omite 4 o 5 de los 12 registros. Lo que me devuelve el sp_cliente_buscar: Código: paginacion se realiza por cada 5 registros: Alguien sabra por que ocurre esto, esta mal mi codigo o esta fallando el servidor? No tengo demasiada experiencia en bases de datos pero creo que sería una buena idea incluir con qué argumentos se está llamando al procedimiento. Además veo que dices que la paginación se hace por cada 5 registros pero la Página 2 tiene 6 registros. Esto te ocurre así o ha sido un error al escribirlo aquí?? Título: Re: Extraño: select con offset y limit devuelve datos duplicados Publicado por: AlbertoBSD en 6 Diciembre 2020, 03:38 am El problema es la fecha de inserción "order by fecha_insercion asc", como hay registros duplicados de fecha no es posible que mysql guarde que registros en base a la fecha ya te envió previamente, tiene que ser forzosamente un order by ID.
Sobre que te devuelva 6 registros en lugar de 5, eso parece ser error de la funcion que llama a ese procedimiento de mysql. Saludos! Título: Re: Extraño: select con offset y limit devuelve datos duplicados Publicado por: Filantropo en 22 Diciembre 2020, 22:06 pm El problema es la fecha de inserción "order by fecha_insercion asc", como hay registros duplicados de fecha no es posible que mysql guarde que registros en base a la fecha ya te envió previamente, tiene que ser forzosamente un order by ID. Ah si claro, todos los registros fueron insertados a la vez por eso la fecha y hora es la misma, lo corregi cambiando a mano cada fecha.Sobre que te devuelva 6 registros en lugar de 5, eso parece ser error de la funcion que llama a ese procedimiento de mysql. Saludos! Pero me dejado la duda ¿por que cuando enumero todos los registros en un solo golpe (CALL SP_CLIENTE_BUSCAR ('',0,9999)) Si me muestran todos los registros exactos sin duplicados pero si los pagino CALL SP_CLIENTE_BUSCAR ('',0,5) ; CALL SP_CLIENTE_BUSCAR ('',5,5) CALL SP_CLIENTE_BUSCAR ('',10,5) y CALL SP_CLIENTE_BUSCAR ('',15,5) me los duplica?, si todos los registros tienen el mismo valor en el campo fecha no deberia el gestor ordenarlos por algun otro campo o debo indicarlo explicitamente??? Título: Re: Extraño: select con offset y limit devuelve datos duplicados Publicado por: AlbertoBSD en 26 Diciembre 2020, 06:28 am si todos los registros tienen el mismo valor en el campo fecha no deberia el gestor ordenarlos por algun otro campo o debo indicarlo explicitamente??? Debes de indicarlo explícitamente., De hecho no deberias de utilizar la fecha como campo para ordenarlos, lo ideal es utilizar el ID. Saludos |