mysql / php: garder une trace supplémentaire lors de la pagination
Question
J'ai une liste d'enregistrements que je souhaite parcourir à l'aide de LIMIT. Toutefois, le premier enregistrement renvoyé sans LIMIT est également l'identificateur racine du reste des enregistrements et je dois le conserver pour chaque page. Est-ce possible? (Je préférerais simplement ne pas exécuter une instruction SQL supplémentaire)
id | index | title
1 | 0 | index of titles
2 | 1 | title1
3 | 1 | title2
4 | 1 | title3
5 | 1 | title4
LIMITE 3, 2 devrait revenir ...
id | index | title
1 | 0 | index of titles
4 | 1 | title3
5 | 1 | title4
La solution
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
Si vous avez une clé composite sur (index, id)
(dans MyISAM
) ou simplement un index sur index
(dans InnoDB
), la première requête ne coûtera presque rien.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow