mysql / php: mantenendo un record extra durante il paging
Domanda
Ho un elenco di record che voglio sfogliare usando LIMIT ma il primo record che viene restituito senza LIMIT è anche l'identificatore di root per il resto dei record e devo tenerlo per ogni pagina. È possibile? (Preferirei semplicemente non eseguire un'istruzione sql aggiuntiva)
id | index | title
1 | 0 | index of titles
2 | 1 | title1
3 | 1 | title2
4 | 1 | title3
5 | 1 | title4
LIMIT 3, 2 dovrebbe tornare ...
id | index | title
1 | 0 | index of titles
4 | 1 | title3
5 | 1 | title4
Soluzione
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 hai una chiave composita su (index, id)
(in MyISAM
) o solo un indice su index
(in InnoDB
), la prima query non costerà quasi nulla.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow