mysql / php: manter um registro extra enquanto paginação
Pergunta
Eu tenho uma lista de registros que eu quero página através da utilização de LIMIT no entanto, o primeiro registro que é devolvido sem limite é também o identificador de raiz para o resto dos registros e eu preciso para mantê-lo para cada página. Isso é possível? (Eu só iria preferir não executar uma instrução SQL adicional)
id | index | title
1 | 0 | index of titles
2 | 1 | title1
3 | 1 | title2
4 | 1 | title3
5 | 1 | title4
limite de 3, 2 deve retornar ...
id | index | title
1 | 0 | index of titles
4 | 1 | title3
5 | 1 | title4
Solução
SELECT *
FROM (
SELECT *
FROM mytable
WHERE index = 0
ORDER BY
index, id
LIMIT 1
) q
UNION ALL
(
SELECT *
FROM mytable
WHERE index = 1
ORDER BY
index, id
LIMIT 3, 2
) q2
Se você tem uma chave composta em (index, id)
(em MyISAM
) ou apenas um índice em index
(em InnoDB
), a primeira consulta vai custar quase nada.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow