Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wybor 3 rekordow: poprzedni, biezacy, nastepny
Forum PHP.pl > Forum > Bazy danych > MySQL
-SaraniS-
Witam
Prosze, pomozcie, lub powiedzcie ze "tak sie nie da" bo glowie sie nad tym i glowie i juz swira dostaje dry.gif
Jest tabela z fotkami - pola: id, sciezka, opis, kategoria.
I jest takie zapytanie:
  1. <?php
  2. 'SELECT * FROM `galeria` WHERE `id`='.$id
  3. ?>

wszystko dziala super. Ale potrzebuje jeszcze pobrac rekord poprzedni i nastepny (o ile istnieja) w stosunku do rekordu danego wartoscia $id.
Jedyne, co mi sie nasunelo, to zrezygnowac z WHERE i pobrac wszystkie a nastepnie w petelce przeleciec wynik az do rekordu nastepnego po $id - jednak jest to baaaardzo nieoptymalne dry.gif
Wiec jak to ugryzc?

A potrzebuje tego, zeby zrobic odnosniki do poprzedniego/ nastepnego zdjecia w galerii.
Poniewaz id niekoniecznie musi byc "po kolei", wiec odpada sposob z warunkiem
  1. <?php
  2. 'where `id`='.$id + 1
  3. ?>
Najlepsze bylyby jakies funkcje typu NEXT_ID/ PREV_ID, ale zdaje sie ze nic takiego w SQL nie ma sad.gif

Dalem post tutaj, poniewaz chodzi mi o rozwiazanie poprzez MySQL, o ile to mozliwe.
-SaraniS-
Dzieki, w jednym z linkow znalazlem odpowiedz (wiec jednak przeoczylem tego posta blink.gif ).
Temat do zamkniecia biggrin.gif
sokar
Cytat
Post tyczy się tego posta:
http://forum.php.pl/index.php?showtopic=24139&hl=

pisze nowego bo pewno szybciej ktoś odpisze. Mianowicie zrobiłem tak jak opisano w tamtym poście

i zapytanie


  1. SELECT *
  2.  
  3.  
  4. FROM galeria_foto WHERE galeria = $f2[galeria] AND id > $dane[4] ORDER BY id ASC LIMIT 1


Faktycznie prawidłowo wyciąga NASTPNE zdjęcie z galerii w opraciu o $dane[4]


  1. SELECT *
  2.  
  3.  
  4. FROM galeria_foto WHERE galeria = $f2[galeria] AND id < $dane[4] ORDER BY id ASC LIMIT 1


Natomiast kiedy daje "<" POPRZEDNIE niestety nie wyciąga poprzedniego rekordu a jedynie pierwszy znaleziony w tabeli nalerzący do $f2[galeria] jakie mogą być tego przyczyny ?


pozniej ktos podal, ze mozna $dane[4] - 1
co oczywiscie jest fatalne bo id nie musi byc po kolei

mozna np. najpierw znalezc to id a pozniej wyciagnac dane
Kod
select max(id) from tabelka where id<$id

co zalatwi przy okazji sprawe gdy nie ma poprzedniego id
FanFataL
Generalnie to ja używałem zawsze tego typu
  1. (SELECT *
  2. FROM tabela WHERE id<4 ORDER BY id DESC LIMIT 1)
  3. UNION
  4. (SELECT *
  5. FROM tabela WHERE id>=4 ORDER BY id ASC LIMIT 2)


Pozdrawiam winksmiley.jpg
...
sokar
hehe no fakt zdecydowanie najprostsze rozwiazanie smile.gif
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.