当我从db表中获取一个特定的记录时,我想同时获取“previous”和“next”记录。例如,我有一张照片表:
photo_id user_id photo_name
1 1 xx
2 2 --
3 1 --
4 1 --
例如,我想获取用户id 1的照片。例如,如果photo_id为1,则不会有任何先前的照片,如果photo_id为3,则先前的记录将为photo_id 1,而接下来的记录将为4。
谢谢你的帮助。
最佳答案
如果您在photo_id == 3
上并且知道它属于user_id == 1
,则:
该用户的“上一个”photo_id
是:
SELECT `photo_id`
FROM `photos`
WHERE `photo_id` < 3 AND `user_id` = 1
ORDER BY `photo_id` DESC
LIMIT 1
该用户的“下一个”
photo_id
是:SELECT `photo_id`
FROM `photos`
WHERE `photo_id` > 3 AND `user_id` = 1
ORDER BY `photo_id` ASC
LIMIT 1
为了获得加分,您可以使用索引来提高效率:
CREATE INDEX `idx_user_photo`
ON `photos`
(`user_id`, `photo_id`)