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