Holas.
Tengo una tabla cliente:
create table cliente (
identificador int not null primary key,
nombres varchar(30),
apellidos varchar (30),
email varchar (50),
telefono varchar (20),
fecha_insercion datetime
);
Las inserciones son mediante SP_CLIENTE_INSERTAR
CREATE PROCEDURE SP_CLIENTE_INSERTAR(
in arg_identificador int,
in arg_nombres varchar(30),
in arg_apellidos varchar(30),
in arg_email varchar(30),
in arg_telefono varchar (20)
)
BEGIN
insert into cliente values(arg_identificador,
arg_nombres,
arg_apellidos,
arg_email,
arg_telefono,
NOW());
END//
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.
CREATE PROCEDURE SP_CLIENTE_BUSCAR(in arg_cadena varchar(50),
in arg_offset int,
in arg_limit int)
BEGIN
select identificador,
nombres,
apellidos,
email,
telefono
from cliente
where nombres like concat("%",arg_cadena,"%")
or apellidos like concat("%",arg_cadena,"%")
order by fecha_insercion asc
LIMIT arg_offset,arg_limit;
END//
Inserte 12 clientes en un sola ejecucion y en la bd se insertaron todos con igual fecha_insercion como es d esperar:
Id nombre fecha_insercion otros_campos.......
1 maria 2020-12-05 17:31:19
2 julio 2020-12-05 17:31:19
3 antonio 2020-12-05 17:31:19
4 marlon 2020-12-05 17:31:19
5 mariela 2020-12-05 17:31:19
6 carmen 2020-12-05 17:31:19
7 ramiro 2020-12-05 17:31:19
8 carla 2020-12-05 17:31:19
9 paola 2020-12-05 17:31:19
10monica 2020-12-05 17:31:19
11 melisa 2020-12-05 17:31:19
12 nicole 2020-12-05 17:31:19
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:
paginacion se realiza por cada 5 registros:
PAGINA1:
1 maria 2020-12-05 17:31:19
2 julio 2020-12-05 17:31:19
3 antonio 2020-12-05 17:31:19
4 marlon 2020-12-05 17:31:19
5 mariela 2020-12-05 17:31:19
PAGINA2:
6 carmen 2020-12-05 17:31:19
5 mariela 2020-12-05 17:31:19
4 marlon 2020-12-05 17:31:19
3 antonio 2020-12-05 17:31:19
2 julio 2020-12-05 17:31:19
PAGINA 03:
2 julio 2020-12-05 17:31:19
1 maria 2020-12-05 17:31:19
La bd esta en un servidor de hosting, el gestor es phpMyAdmin.
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:
call SP_CLIENTE_BUSCAR ('',0,5) <-----PAG 1
call SP_CLIENTE_BUSCAR ('',5,5) <-----PAG 2
call SP_CLIENTE_BUSCAR ('',10,5) <-----PAG 3
Crei que tenia un error el codigo php que invoca a este proc almacenado pero no. Ejecute directamente en la consola phpmyadmin los 3 calls que escribi arriba y devuelve igual que el php: duplicados e invertidos
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?
Cita de: Filantropo en 6 Diciembre 2020, 02:18 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:
paginacion se realiza por cada 5 registros:
PAGINA1:
1 maria 2020-12-05 17:31:19
2 julio 2020-12-05 17:31:19
3 antonio 2020-12-05 17:31:19
4 marlon 2020-12-05 17:31:19
5 mariela 2020-12-05 17:31:19
PAGINA2:
6 carmen 2020-12-05 17:31:19
7 ramiro 2020-12-05 17:31:19
5 mariela 2020-12-05 17:31:19
4 marlon 2020-12-05 17:31:19
3 antonio 2020-12-05 17:31:19
2 julio 2020-12-05 17:31:19
PAGINA 03:
2 julio 2020-12-05 17:31:19
1 maria 2020-12-05 17:31:19
La bd esta en un servidor de hosting, el gestor es phpMyAdmin.
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í??
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!
Cita de: 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!
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.
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???
Cita de: Filantropo en 22 Diciembre 2020, 22:06 PM
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