Odpowiedź Alexandra jest bliska. Gdy zapytasz o id < 2 LIMIT 1 zwróci 1 , ale jeśli zapytasz o id < 5 LIMIT 1 to również zwróci 1 . To dlatego, że zwraca 1, 2, 3, 4 i pobiera pierwszy element, którym jest 1 zamiast potrzebnych 4 .
Wystarczy dodać ORDER BY id DESC aby uzyskać poprzedni element. To zwróci 4, 3, 2, 1 i LIMIT 1 zwróci 4 lub poprzedni element.
$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);