SELECT *
FROM
(
SELECT @r := COUNT(*),
@up := @r,
@down := @r
FROM items
WHERE (timestamp, id) < (SELECT timestamp, id FROM items WHERE id = @id)
) i,
(
SELECT id, timestamp, st, c
FROM (
SELECT @down := CASE WHEN (@down % 50) <> 0 THEN @down := @down - 1 ELSE @down END AS c,
@stop := CASE WHEN (@down % 50) <> 0 THEN 0 ELSE 1 END AS st,
id, timestamp
FROM items
WHERE (timestamp, id) <= (SELECT timestamp, id FROM items WHERE id = @id)
ORDER BY
timestamp DESC, id DESC
LIMIT 50
) down
UNION ALL
SELECT id, timestamp, st, c
FROM (
SELECT @up := CASE WHEN (@up % 50) <> 0 THEN @up := @up + 1 ELSE @up END AS c,
@stop := CASE WHEN (@up % 50) <> 0 THEN 0 ELSE 1 END AS st,
id, timestamp
FROM items
WHERE (timestamp, id) > (SELECT timestamp, id FROM items WHERE id = @id)
ORDER BY
timestamp, id
LIMIT 50
) up
) r
WHERE NOT st
ORDER BY timestamp, id