SELECT ID,name FROM obrazy WHERE ID < 999 ORDER BY ID DESC LIMIT 1 UNION SELECT ID,name FROM obrazy WHERE ID > 999 ORDER BY ID LIMIT 1
SQLite twierdzi, że ORDER BY powinien znaleźć się dopiero po słowie UNION. Nic nie daje użycie UNION ALL i wzięcie tych 2 zapytań w nawiasy. Czy pozostaje wysyłać 2 oddzielne zapytania?
Może są inne metody na wyciągnięcie poprzedniego i kolejnego rekordu z bazy danych w 1 zapytaniu?
Zapytanie musi działać w SQLite i MySQL.
Poza tym można podpinać do ORDER BY? W SQLite nie ma błędu, ale i reakcji.
Kod
$x = $db->prepare('SELECT ID,name FROM obrazy WHERE ID<4 ORDER BY :test LIMIT 1');
$x->bindValue(':test','ID DESC');
$x->execute();
Niezależnie od tego, czy podepnę ID DESC, czy ID, otrzymuję ten sam rekord, choć powinien pojawić się inny.$x->bindValue(':test','ID DESC');
$x->execute();
Właściwie zależy mi na pobraniu:
- poprzedniego obrazu, a gdy nie ma - ostatniego
- następnego obrazu, a gdy nie ma - pierwszego
Wysyłając nawet 2 osobne zapytania dla "poprzedni" i "następny", jaki warunek postawić, aby pobrać ostatni rekord, gdy nie znajdzie poprzedniego - tak jak napisałem powyżej?