Es muy posible que una pregunta como esta se haya hecho antes, pero no puedo pensar en los términos para buscar.SQL Seleccionando "Ventana" alrededor de la Fila Particular
Estoy trabajando en una aplicación de galería de fotos y quiero mostrar 9 miniaturas que muestran el contexto de la foto actual (en una cuadrícula de 3x3 con la foto actual en el centro, a menos que la foto actual esté en la primera Se muestran 4 fotos, en cuyo caso si, por ejemplo, si la foto actual es la 2ª, quiero seleccionar las fotos 1 a 9). Por ejemplo, dado un álbum que contiene la lista de fotos con ids:
1, 5, 9, 12, 13, 18, 19, 20, 21, 22, 23, 25, 26
Si la corriente foto es 19, quiero ver también:
9, 12, 13, 18, 19, 20, 21, 22, 23
Si la fotografía actual es 5, I desea ver también:
1, 5, 9, 12, 13, 18, 19, 20, 21
He estado pensando en algo en la línea de:
SELECT *
FROM photos
WHERE ABS(id - currentphoto) < 5
ORDER BY id ASC
LIMIT 25
pero esto no funciona en el caso en que los identificadores son no secuencial (como en el ejemplo anterior), o para el caso en que hay son fotos insuficientes antes de la foto actual.
¿Alguna idea?
Gracias,
Dom
P. S. Por favor, deje un comentario si algo no está claro, y aclararé la pregunta. Si alguien puede pensar en un título más útil para ayudar a otras personas a encontrar esta pregunta en el futuro, por favor coménteselo también.
Esta es una técnica buena y útil. Lo he usado con MySQL en el pasado. Para manejar los extremos de la lista, donde no tendría suficientes filas: use el LÍMITE 10 y resuelva la selección en el código de procedimiento. – dkretz
Gracias le dorfier, que resuelve el problema con los límites, lo editaré según lo sugerido. – Turnkey
Terminé haciendo algo muy similar a esto. Agregué un "ORDER BY id ASC" en el resultado de la UNIÓN, por lo que las filas volvieron como estaba previsto. Deberá cambiar la primera ORDEN por ID DESC, de lo contrario, las primeras filas siempre volverán. –