很可能以前曾经问过像这样的问题,但我想不出要搜索的术语.
我正在制作照片库应用程序,并希望显示9个缩略图,显示当前照片的上下文显示(在3x3网格中,当前照片位于中央,除非当前照片显示在前4张照片中,在这种情况下,如果当前照片是第二张,我想选择照片1到9).例如,给定一个包含带有ID的照片列表的相册:
1,5,9,12,13,18,19,20,21,22,23,25,26
如果当前照片是19,我还想查看:
9,12,13,18,19,20,21,22,23
如果当前照片为5,我还要查看:
1,5,9,12,13,18,19,20,21
我一直在想一些类似的东西:
SELECT * FROM photos WHERE ABS(id - currentphoto) < 5 ORDER BY id ASC LIMIT 25
但这不适用于ids是非连续的(如上例所示),或者当前照片之前照片不足的情况.
有什么想法吗?
谢谢,
大教堂
ps如果有任何不清楚的地方,请发表评论,我会澄清这个问题.如果有人能想到一个更有用的标题来帮助其他人将来找到这个问题,那么请评论.
可能只需使用UNION,然后在显示结果的过程代码中修剪额外的结果(因为这将在非边缘情况下返回20行):
(SELECT * FROM photos WHERE ID < #current_id# ORDER BY ID DESC LIMIT 10) UNION (SELECT * FROM photos WHERE ID >= #current_id# ORDER BY ID ASC LIMIT 10) ORDER BY ID ASC
编辑:正如le dorfier所建议的那样,UNION双方的限制增加到10 .
编辑2:修改以更好地反映最终实施,如Dominic所建议的那样.