当我从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`)

07-24 18:57
查看更多