Alexandrs svar er tæt på. Når du forespørger efter id < 2 LIMIT 1 det vil returnere 1 , men hvis du forespørger efter id < 5 LIMIT 1 dette vil også returnere 1 . Det er fordi den returnerer 1, 2, 3, 4 og tager det første element, som er 1 i stedet for den nødvendige 4 .
Bare tilføj ORDER BY id DESC for at få den forrige vare. Dette vil returnere 4, 3, 2, 1 og LIMIT 1 returnerer 4 , eller det forrige 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);