A resposta de Alexandr está próxima. Quando você consulta por
id < 2 LIMIT 1
ele retornará 1
, mas se você consultar id < 5 LIMIT 1
isso também retornará 1
. Isso porque ele retorna 1, 2, 3, 4
e pega o primeiro elemento, que é 1
em vez do necessário 4
. Basta adicionar
ORDER BY id DESC
para obter o item anterior. Isso retornará 4, 3, 2, 1
e o LIMIT 1
retornará 4
, ou o elemento anterior. $query = $em->createNativeQuery('SELECT id FROM users WHERE
id = (SELECT id FROM users WHERE id > 2 LIMIT 1)
OR
id = (SELECT id FROM users WHERE id < 2 ORDER BY id DESC LIMIT 1)', $rsm);