La risposta di Alexandr è vicina. Quando esegui una query per id < 2 LIMIT 1
restituirà 1
, ma se esegui una query per id < 5 LIMIT 1
questo restituirà anche 1
. Questo perché restituisce 1, 2, 3, 4
e prende il primo elemento, che è 1
anziché il necessario 4
.
Basta aggiungere ORDER BY id DESC
per ottenere l'elemento precedente. Questo restituirà 4, 3, 2, 1
e il LIMIT 1
restituirà 4
, o l'elemento precedente.
$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);