Aqui está uma ideia. Você pode descarregar as operações caras para uma atualização quando o merceeiro insere/atualiza novas ofertas, e não quando o usuário final seleciona os dados a serem visualizados. Isso pode parecer uma maneira não dinâmica de lidar com os dados de classificação, mas pode aumentar a velocidade. E, como sabemos, sempre há um equilíbrio entre desempenho e outros fatores de codificação.
Crie uma tabela para armazenar o próximo e o anterior para cada oferta e cada opção de classificação. (Como alternativa, você pode armazenar isso na tabela de ofertas se sempre tiver três opções de classificação - a velocidade da consulta é um bom motivo para desnormalizar seu banco de dados)
Então você teria essas colunas:
- Tipo de classificação (não classificado, preço, classe e descrição do preço)
- ID da oferta
- ID anterior
- Próxima ID
Quando as informações detalhadas da página de detalhes da oferta são consultadas no banco de dados, o NextID e o PrevID fazem parte dos resultados. Portanto, você só precisaria de uma consulta para cada página de detalhes.
Cada vez que uma oferta é inserida, atualizada ou excluída, você precisa executar um processo que valide a integridade/precisão da tabela de tipo de classificação.