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
call SP_CLIENTE_BUSCAR ('',5,5) <-----PAG 2
call SP_CLIENTE_BUSCAR ('',10,5) <-----PAG 3
call SP_CLIENTE_BUSCAR ('',0,9999999)
Lista completa clientes
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?