Si je comprends bien votre problème, cela ressemble à un problème que je J'ai dû résoudre avant aussi. (Bien qu'il ait été déguisé pour moi.)
MySQL n'a pas de moyen de voir efficacement la différence entre les enregistrements précédents/suivants. J'ai travaillé autour de ceci en introduisant une liste liée à la table. Le coût de ce faire était que tous les insertions et suppressions devaient passer par une procédure transactionnelle sûre qui gardait la liste (double) liée. J'ai opté pour une paire de procédures stockées, qui a fonctionné magnifiquement.
jeux de données résultant ressemblait à ceci:
+------------------------------------+
| id | insert_ts | prev_id | next_id |
+------------------------------------+
| 1 | 12:32 | NULL | 2 |
| 2 | 12:34 | 1 | 3 |
| 3 | 12:40 | 2 | NULL |
+------------------------------------+
(. Indexé unique avec une clé étrangère à elle-même sur prev_id
et next_id
)
Interrogation alors l'écart entre un dossier et ce qui a précédé, il est tout simplement: Assurez-vous que si vous utilisez la date/l'horodatage, utilisez la fonction de comparaison de temps appropriée et non la ma thématique "moins" comme je l'ai fait ci-dessus.
Pour vous assurer des performances - il s'agissait d'une table modérément à haut débit sur un système financier, la cohérence des données était solide et le débit n'a jamais été goulot. Je peux vous fournir quelques conseils sur la façon d'implémenter les routines à insérer/supprimer.
S'il vous plaît partager le tableau et les données avec nous et aussi nous fournir les résultats attendus .. vous obtiendrez plus et peut-être meilleures réponses –
Voir: [Pourquoi devrais-je fournir un MCVE pour ce qui me semble être un SQL très simple requête?] (https://meta.stackoverflow.com/questions/333952/pourquoi-doit--provide-un-mcve-pour-que-vous-permet-de-montre-une-que-simple- sql-query) – Strawberry