La réponse d'Alexandr est proche. Lorsque vous recherchez id < 2 LIMIT 1 il renverra 1 , mais si vous recherchez id < 5 LIMIT 1 cela renverra également 1 . C'est parce qu'il renvoie 1, 2, 3, 4 et prend le premier élément, qui est 1 plutôt que les 4 nécessaires .
Ajoutez simplement ORDER BY id DESC pour obtenir l'élément précédent. Cela renverra 4, 3, 2, 1 et le LIMIT 1 renverra 4 , ou l'élément précédent.
$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);