Mostrar apenas os últimos registros do BD na grid - Dúvida!!!

Olá!

Estou com o seguinte problema: Tenho que consulta em que a grid está selecionando e mostrando do banco de dados todos os registros inseridos. Isto está aumentando o fluxo da rede, por isso preciso limitar esta busca no BD de apenas 10 ou 20 últimos registros.

1ª Tentativa: Na SQL da aplicação tentei usar a opção “LIMIT 10”, mas não funcionou.
2ª Tentativa: Nas configurações tentei colocar paginação total e nº de registros a exibir como 10, mas não funcionou.
3ª Tentativa: Na SQL da aplicação tentei filtrar pela data atual: …WHERE (campo = DATE_FORMAT(NOW(), ‘%Y-%m-%d’)) mas não funcionou,deu o erro: “Faltou marcar campos que devem fazer parte da Consulta”

Alguém tem alguma outra opinião, ou então uma luz do que eu possa estar fazendo errado?

2ª Tentativa: Nas configurações tentei colocar paginação total e nº de registros a exibir como 10, mas não funcionou.

Você tem que usar paginação parcial, aí coloca o limite por página.
Fazendo assim, a cláusula limit fica por conta do SC e vc agiliza sua consulta.
Considere também usar índices se usar WHERE.

coloca em ordem descrescente pelo id e pagina com 20.

Companheiros bom dia!

Estas sugestões que me deram já realizei e pelo monitoramento da rede elas ainda continuam com tráfego alto, pois mesmo sendo 20 registros de página por página, a grid está puxando do banco em torno de 4000 registros a cada Refresh (1mim), sem contar quando inseri outro registro.
Sobretudo, arrumei uma solução com o WHERE:

WHERE data = ‘xxxxxxx’
Ele só está puxando os registro com data xxxxxxx.

Agora estou precisando de um comando MYSQL que puxe os dois últimos dias para aprimorar.
Já tentei WHERE (data = DATE_FORMAT(NOW(), ‘%Y-%m-%d’)) mas não deu certo ainda.

Estou pesquisando, se puderem me ajudar…

Faz como o Haroldo falou, é a maneira rápida e prática, eu uso desta forma também…

Flávio, já verificou os índices desta tabela? Está acontecendo só com esta grid?
Outra coisa 4000 registros é muito pouco para estar tão alto. Pode ser que sua query tenha muitos JOINS e com tabelas maiores.

Sugestões: 1) Verifique os índices; 2) Verifique a estrutura da query, as vezes mudando o lado de ação (LEFT JOIN ou RIGHT JOIN), ajuda;

Forte Abraço

Resolvido por enquanto!!!

Consegui resolver listando apenas os registros dos últimos 05 dias. O problema é que para pesquisar períodos antigos vou ter que usar outra grid.
Ainda bem que ela já existe. Ficou assim o fim do SQL:

WHERE TO_DAYS(NOW()) - TO_DAYS(data) <= 15

Caro Luis Eduardo, agradeço pela dica e vou verificar a situação repassada, pois às vezes o problema seja realmente este que você citou.

No mais obrigado a todos pelo apoio.

Caro Flavio,

Apesar de só ter visto seu problema agora, passei por algo semelhante - só que com mais de 100.000 registros na tabela (em um formulário) -. mesmo usando o SC9, e encontrei uma “solução deselegante” para esse problema - enquanto a SC não responde o chamado que abri.

No campo Where (Menu Vertical >> Formulário >> SQL), coloque (sem ; no final): [ suas condições, se tiver + ] and id_da_tabela >= ( (select max(id_da_tabela) from tabela) - 9 )

E no campo Ordenação (ainda no SQL), adicione: [ seu código, caso haja, lembre-se de adicionar uma vírgula aqui , + ] id_da_tabela DESC

Obs.: isso funcionará considerando que o campo id_da_tabela seja auto-incrementável. Para relatórios, basta fazer o mesmo no SQL da grid. Note que - 9 (menos nove) trará 10 (dez) registros, pois na condição há >= (maior OU igual), isso incluirá um registro a mais. Portanto, se colocar - 10 (menos dez), retornarão os últimos 11 (onze) registros, e assim por diante.

Essa “solução” genérica deverá funcionar para a maioria dos casos, pois quase sempre há um campo de id na tabela, mas nem sempre ou necessariamente um de data/time.

Agora, o “feito colateral”: na busca rápida, só estarão disponíveis os registos resultantes da query (os últimos 10) que estão no cache / sessão. Para buscar em todos os registros, provavelmente será necessário adicionar um campo personalizado de busca para fazer um full scan na tabela e atualizar / modificar a query (que certamente deverá estar em uma variável) - gambiarra que (ainda) não fiz.

Espero, sinceramente, que a SC apresente uma solução elegante para o problema ou disponibilize uma atualização com a melhoria para essa limitação.

Faças as adequações para a sua necessidade.

No SC V9, já tem isso, não precisa ‘fazer gambiarras’, fica fácil simples e limpo.

Ainda não migrei para a V9 mas vi essa opção nela.
Muito boa a observação do Jailton.

Jailton,

Bom dia.

Conforme informado anteriormente, no FORM (formulário, tipo Registro Único) do SC9 NÃO HÁ ESSA OPÇÃO (Limit ou mesmo o campo para manipulação do SQL.Ver imagem a seguir), somente nas grids (consultas). Eis o motivo da “gambi”. Por isso estou no aguardo da resposta oficial da SC sobre o assunto.

De qualquer forma, sua contribuição foi MUITO BOA para os que necessitarem implementar esse recurso nas consultas / grids, sem gambiarra. :slight_smile:

Tão logo receba o retorno (positivo ou não) da SC, postarei aqui.

Neste seu caso então era só criar um VIEW EDITÁVEL e usar ela para fazer o formulário.

CREATE VIEW view_minha_tabela AS (SELECT * FROM minha_tabela ORDER BY LancamentoID DESC LIMIT 10);

Usar a tabela view_minha_tabela no SC para criar seu Formulário Único registro.

E usar uma “view editável” para um formulário de inclusão - que deveria ter uma solução elegante, assim com a grid tem, para esse tipo de problema - não é uma [glow=red,2,300][shadow=red,left]GAMBIARRA[/shadow][/glow]? :wink: