ďťż

[SQLite] Następny i poprzedni rekord problem z ORDER BY i UNION

       

Podstrony


telcocafe

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.
$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.

Właściwie zależy mi na pobraniu:
- poprzedniego obrazu, a gdy nie ma - ostatniego
- następnego obrazu, a gdy nie ma - pierwszego
Użytkownik Ferrari edytował ten post 19 luty 2010, 17:29


A nie możesz dać ID-1 i pobrać 3 rekordów? :)

A jeśli rekordów w 1 kategorii jest 100, to mam pobrać wszystkie? Może to nie jest taki zły pomysł, ale:
1. Nie mogę założyć, że pierwszy obraz w kategorii ma ID=1
2. Podobnie z ostatnim obrazem
3. Nie mogę założyć, że poprzedni obraz ma ID = ID_aktualnego - 1
4. Podobnie z następnym obrazem

Podglądnąłem kod PHP-Fusion. Tam zdjęcia są posegregowane wg pola photo_order. Przy najmniejszej zmianie trzeba z powrotem segregować je na nowo, ale może warto? Przecież można sortować też wg nazwy.
Użytkownik Ferrari edytował ten post 20 luty 2010, 15:56
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.