Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] pobieranie rekordu poprzedniego i następnego
Forum PHP.pl > Forum > Bazy danych > MySQL
tomall
Witam
Jest sobie baza danych ze zdjęciami.
Kod wyświetlający pojedyncze zdjęcie jest taki:
  1. SELECT * FROM galery WHERE id='$id'


id jest auto_increment.

Chciałbym przy tym pojedynczym zdjęciu dodać linki do zdjęcia następnego oraz poprzedniego. Wszystko było by proste, gdyby id leciało po kolei. Ale kiedy usuwa się jakieś zdjęcie to powstają dziury np. id=1,2,5,7, itp.

Nie wiem czy istnieje jakieś zapytanie, które pobiera sąsiednie rekordy?

z góry dzięki za odpowiedź.

pozdrawiam
cudny
Proponuję dodać kolumnę aktywny i zamiast kasować rekordy dać 1-aktywny, 2-nieaktywny.
W ten sposób robisz pętlę i dajesz dekrementację rekordu + warunek że jeśli nie aktywny raz jeszcze dekrementacja i tak dalej - w końcu wyjdzie, które id je poprzednie i aktywne.

To moja propozycja - wtedy zawsze masz wszystko po kolei.

pzdr

Można jeszcze nie ingerować w bazę - dajesz
  1. SELECT id FROM galery WHERE id < 8 ORDER BY id DESC LIMIT 1

wtedy masz ostatnie id mniejsze od 8 czyli jeśli istnieją id 1,2,3,5,6,8 to pobierze ci id nr 6

pzdr
tomall
Pierwszy pomysł w moim przypadku się nie sprawdzi ponieważ galeria ma możliwość filtracji wg kategorii oraz wg użytkownika, zatem linki będą wyglądały tak:

<<poprzednie z kategorii - następne z kategorii >>

i tutaj np. id poprzednie mogą być 77, 90, 120 itp

w innym wypadku
<<poprzednie użytkownika - następne użytkownika >>

i tutaj id mogą być 30, 35, 78 itp.

Natomiast ten drugi pomysł wydaje się być ciekawy

Można by zrobić tak:
  1. $id = $_GET['id'];
  2. $cat = $_GET['cat'];
  3.  
  4. SELECT id FROM galery WHERE id < '$id' AND WHERE category = '$cat' ORDER BY id DESC LIMIT 1

muszę tylko sprawdzić czy to będzie prawidłowo działało.
maly_swd
u kolegi mozesz poczytac: http://nospor.pl/mysql-faq-n25.html#faq-4
tomall
dzięki za rady, zrobiłem i działa.
Zastanawiam się tylko czy zbyt duża ilość zapytań do bazy danych nie wpłynie na wydajność serwera.
W moim przypadku wygląda to tak:

3 zapytania aby uzyskać linki poprzednie-następne, poprzednie-następne w kategorii oraz poprzednie-następne autora
1 zapytanie aby uzyskać nazwę pliku z fotografią.
1 zapytanie aby zaktualizować licznik odsłon fotografii.
1 zapytanie aby pobrać komentarze oraz avatary.
1 zapytanie sprawdzające czy nie ma nowych wiadomości PW.

i to wszystko się wykonuje w momencie wczytania każdej fotografii. Nie będzie tego za dużo?
maly_swd
Jesli masz na wszystko dobrze pozakladane indexy to nie powinno byc problemu z wydajnoscia. Zawsze mozesz cachowac zapytania (lub zostawic to dla mysqla aby to on cachowal)

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.