Отговорът на Александър е близо. Когато правите заявка за id < 2 LIMIT 1 ще върне 1 , но ако подадете заявка за id < 5 LIMIT 1 това също ще върне 1 . Това е така, защото връща 1, 2, 3, 4 и приема първия елемент, който е 1 вместо необходимия 4 .
Просто добавете ORDER BY id DESC за да получите предишния артикул. Това ще върне 4, 3, 2, 1 и LIMIT 1 ще върне 4 , или предишния елемент.
$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);