Điều này phức tạp, vì bạn đang chọn một hàng theo id
, nhưng chọn những cái liền kề bởi một trường khác, modified_time
.
Ý tưởng là sử dụng các biến để liệt kê các hàng. Và, sử dụng một hàng khác để tính giá trị cho id
mà bạn quan tâm. Thực hiện việc này trong một truy vấn con, sau đó chọn các hàng bạn muốn:
SELECT t.*
FROM (SELECT `id`,
@rn := if(@rnid := if(t.id = '".id."', @rn + 1, @rnid),
@rn + 1, @rn + 1
) as rn
FROM {#table} t
"other_part_of_query" cross join
(select @rn := 0, @rnid := 0) vars
ORDER BY `modified_time` DESC
) t
WHERE rn in (@rnid - 1, @rnid, @rn)