Alexandrs svar är nära. När du frågar efter id < 2 LIMIT 1 det returnerar 1 , men om du frågar efter id < 5 LIMIT 1 detta returnerar också 1 . Det beror på att den returnerar 1, 2, 3, 4 och tar det första elementet, som är 1 snarare än den nödvändiga 4 .
Lägg bara till ORDER BY id DESC för att hämta föregående objekt. Detta returnerar 4, 3, 2, 1 och LIMIT 1 returnerar 4 , eller föregående 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);