SQL Server - Paginación con php+sql server

 
Vista:

Paginación con php+sql server

Publicado por kuzo440 (3 intervenciones) el 08/07/2005 10:14:30
Tengo un problema con Microsoft SQL SERVER + PHP. No consigo que hacer el código de paginación de resultados correctamente, porque el código que tengo creado sólo funciona si el campo clave es un campo único.

En mi tabla tengo dos campos clave y el valor que pueden tener se puede repetir. Al hacer el “campo1 not in” al haber valores repetidos me descarta el último NOVLIQ. Realmente tendría q mostrar en la 2a pagina solamamente NOVLIQ-CE (último registro), pero aparece en blanco.

La solución aparente seria después del where colocar el segundo campo clave pero no lo coje o utilizar un campo extra identificador de tipo autonumérico que no se repita y utilizarlo en el where. Pero quiero saber si hay otra forma

CAMPO_1(clave1) CAMPO2(clave2)
ANUCAL INF
ANUDUP CE
ANUDUP INF
ANUNOT INF
NOVLIQ ENG
NOVLIQ CE

select top 5 * from tabla where campo1 not in (select top 5 campo1 from tabla order by campo1) order by campo1

Os agradecería mucho vuestra ayuda porque no encuentro la solución y se me hecha el tiempo encima.
SALUDOS A TODOS !!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

RE:Paginación con php+sql server

Publicado por Liliana (151 intervenciones) el 08/07/2005 14:09:27
Hola,
Para paginar, debés tener una clave que no se repita.
Te mando un código en base a algo publicado por Javier Loria (gracias maestro).
Con una tabla en la que se repitan los apellidos y no los nombres, puedes probar cómo trabaja.
Espero que te sirva adaptándolo a tus necesidades,
Liliana.

/* Paginacion */
CREATE PROCEDURE #Paginacion
@Apellido varchar(40) = NULL OUTPUT, @Nombre varchar(40) = NULL OUTPUT
AS
SET NOCOUNT ON

-- Seleccione las proximas 5 filas
SELECT TOP 2 WITH TIES *
FROM #test
WHERE CASE WHEN @Apellido IS NULL THEN 1
WHEN @Apellido + @Nombre < apellido + nombre THEN 1 ELSE 0 END=1
ORDER BY apellido, nombre

-- Seleccione el siguiente apellido
SELECT @Apellido = MAX(apellido),
@Nombre = MAX(nombre)
FROM ( SELECT TOP 2 apellido, nombre
FROM #test
WHERE CASE WHEN @Apellido IS NULL THEN 1
WHEN @Apellido + @Nombre < apellido + nombre THEN 1 ELSE 0 END=1
ORDER BY apellido, nombre) AS N
GO
/* Fin de Declaracion de Procedimiento */

/* Uso de Procedimiento */
DECLARE @UltimoApellido varchar(40), @UltimoNombre varchar (40)

EXEC #Paginacion @UltimoApellido OUTPUT, @UltimoNombre OUTPUT
EXEC #Paginacion @UltimoApellido OUTPUT, @UltimoNombre OUTPUT
EXEC #Paginacion @UltimoApellido OUTPUT, @UltimoNombre OUTPUT
/* Fin de Procedimiento */

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Paginación con php+sql server

Publicado por kuzo440 (3 intervenciones) el 12/07/2005 09:47:21
Grácias, lo probare !!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Paginación con php+sql server

Publicado por kuzo440 (3 intervenciones) el 12/07/2005 10:05:59
Ya me han dado la respuesta en el foro de PHP.

La frase queda:

select *
from tabla
where campo1+campo2 not in
(select top 5 campo1+campo2
from tabla
order by campo1, campo2)
order by campo1,campo2

MUCHAS GRACIAS !!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Paginación con php+sql server

Publicado por Liliana (151 intervenciones) el 12/07/2005 14:20:29
Y cómo vas a hacer con los siguientes 5?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar