La réponse d'Alexandr est proche. Lorsque vous recherchez id < 2 LIMIT 1
il renverra 1
, mais si vous recherchez id < 5 LIMIT 1
cela renverra également 1
. C'est parce qu'il renvoie 1, 2, 3, 4
et prend le premier élément, qui est 1
plutôt que les 4
nécessaires .
Ajoutez simplement ORDER BY id DESC
pour obtenir l'élément précédent. Cela renverra 4, 3, 2, 1
et le LIMIT 1
renverra 4
, ou l'élément précédent.
$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);