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);