Il est tout à fait possible qu'une question comme celle-ci ait déjà été posée, mais je ne peux pas penser aux termes à rechercher. Je travaille sur une application de galerie de photos, et je veux afficher 9 vignettes montrant le contexte de la photo actuelle affichée (dans une grille 3x3 avec la photo actuelle au centre, sauf si la photo actuelle est dans la première 4 photos étant affichées, dans ce cas si par exemple si la photo actuelle est la 2ème je veux sélectionner les photos 1 à 9). Par exemple, étant donné un album contenant la liste des photos avec ids:SQL Sélection de "Fenêtre" autour d'une ligne particulière
1, 5, 9, 12, 13, 18, 19, 20, 21, 22, 23, 25, 26
Si le courant photo est 19, je veux voir aussi:
9, 12, 13, 18, 19, 20, 21, 22, 23
Si la photo actuelle est 5, je veux voir aussi:
1, 5, 9, 12, 13, 18, 19, 20, 21
J'ai pensé à quelque chose le long des lignes de:
SELECT *
FROM photos
WHERE ABS(id - currentphoto) < 5
ORDER BY id ASC
LIMIT 25
mais cela ne fonctionne pas dans le cas où les ids sont non-séquentielle (comme dans l'exemple ci-dessus), ou pour le cas où il Les photos sont insuffisantes avant l'instantané.
Des pensées?
Merci,
Dom
P.S. S'il vous plaît laissez un commentaire si quelque chose n'est pas clair, et je vais clarifier la question. Si quelqu'un peut penser à un titre plus utile pour aider d'autres personnes à trouver cette question à l'avenir, alors s'il vous plaît commentez aussi.
C'est une bonne technique utile. Je l'ai utilisé avec MySQL dans le passé. Pour gérer les extrémités de la liste, où vous n'auriez pas assez de lignes: utilisez LIMIT 10 et développez la sélection dans le code de procédure. – dkretz
Merci le dorfier, qui résout le problème avec les limites, je vais modifier comme suggéré. – Turnkey
J'ai fini par faire quelque chose de très similaire à ça. J'ai ajouté un "ORDER BY id ASC" sur le résultat de l'UNION, donc les lignes sont revenues comme prévu. Vous devrez changer la première ORDRE pour être de DESC, sinon les premières lignes reviendront toujours. –