FORUMS PROFESSIONNELS
WINDEV
,
WEBDEV
et
WINDEV Mobile
Accueil
|
Messages récents
|
Connexion
|
Déconnexion
|
Français
Accueil
→
WINDEV 25
→
Como paginar um retorno de um select ? Como fazer uma paginação de resultados?
Como paginar um retorno de um select ? Como fazer uma paginação de resultados?
Débuté par Boller, 14 aoû. 2023 18:50 - Aucune réponse
Connectez-vous…
Boller
#1
Membre enregistré
3 659 messages
Popularité : +175 (223 votes)
Posté le 14 août 2023 - 18:50
Oi pessoal,
Pergunta que me fizeram:
Como fazer uma paginação de resultados?
R.:
Simples, Vc nao coloca uma tabela com milhões de registro, usa paginação
Select *
from tabela
Limit nqtdeReg offset nqtdeRegpaginacao
Isso no Hfsql e no PostgreSQL rows
SELECT coluna1,
...
FROM tabela
WHERE ...
ORDER BY coluna1,
...
OFFSET @Offset ROWS
FETCH NEXT @Limit ROWS ONLY;
É inviável dar uma carga de milhões, bilhões de registros
Por isso que tem os botoes
<< < > >>
No seu caso você pode trocar a variável @Limit para @QtdPorPagina e @Offset para (@Pagina - 1) * @QtdPorPagina e utilizar da seguinte forma:
DECLARE @QtdPorPagina INT = 50,
@Pagina INT = 1;
Substituindo na sua query
DECLARE @QtdPorPagina INT = 50,
@Pagina INT = 1;
SELECT os.id,
os.dataHora,
material.nome AS nomeEquip,
cliente.nomeFantasia,
setor.nome AS NomeSetor,
os.motivoOs,
(SELECT SUM(itemMaterial.valorUnitario)
FROM os AS OS1
INNER JOIN itemMaterial ON itemMaterial.id = os.idItemMaterial
WHERE OS1.id = os.id ) AS TotalMaterial,
tipoOs.nome AS NomeTipoOS,
itemMaterial.nSerie,
itemMaterial.rm,
os.status
FROM os
INNER JOIN itemMaterial ON itemMaterial.id = os.idItemMaterial
INNER JOIN modelo ON modelo.id = itemMaterial.idModelo
INNER JOIN material ON material.id = itemMaterial.idMaterial
INNER JOIN cliente ON cliente.id = os.idCliente
INNER JOIN setor ON setor.id = os.idSetor
INNER JOIN usuario ON usuario.id = os.idUsuarioSolicitante
INNER JOIN tipoOs ON tipoOs.id = os.idTipoOs
WHERE cliente.id = (SELECT usuario.idCliente
FROM usuario
WHERE usuario.login = 'julio')
ORDER BY dataHora DESC
OFFSET (@Pagina - 1) * @QtdPorPagina ROWS
FETCH NEXT @QtdPorPagina ROWS ONLY;
Para SQL Server anterior ao 2012
Para obter um resultado parecido você pode utilizar a função ROW_NUMBER()para gerar o número da linha e trabalhar com essa informação da seguinte forma:
WITH resultado AS
(SELECT coluna1,
...,
ROW_NUMBER() OVER (ORDER BY coluna1, ...) AS linha
FROM tabela
WHERE ...)
SELECT *
FROM resultado
WHERE linha >= @Offset
AND linha < @Offset + @Limit
Veja também:
Para paginar é necessária uma ordenação (ORDER BY) dos registros para o seu caso:
SELECT * FROM table
ORDER BY 1 --Nome campo
OFFSET 10 ROWS FETCH NEXT 5 ROWS ONLY
Muita atenção
Ok
--
Adriano José Boller
______________________________________________
Consultor e Representante Oficial da
PcSoft no Brasil
+55 (41) 99949 1800
adrianoboller@gmail.com
skype: adrianoboller
http://wxinformatica.com.br/
Signaler
1
0
→ Revenir à WINDEV 25
WINDEV 25
Français
English
Español
Portuguesa
Fermer cette fenêtre
Type de recherche
Uniquement les sujets
Tous les messages
Période de recherche
Date indifférente
Moins d'une heure
Moins de 24 heures
Moins d'une semaine
Moins d'un mois
Moins d'un an
Annuler
Aperçu de votre message
Ajouter une image
Importer une image depuis une URL
Envoyer une image depuis un fichier de votre disque
Déposez ici un fichier ou cliquez sur "Parcourir..."
ou
Annuler
0%
WLangage
SQL
XML, HTML
JAVA, Javascript
Texte