Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Galeria - przeglądanie next/previous
Forum PHP.pl > Forum > Bazy danych > MySQL
deha21
Witam,
Muszę zrobić na szybko prostą galerię. Zastanawiam się jak to zrobić żeby było łatwo i przejrzyście. Wymyśliłem, że na początku będą miniaturki zdjęć i gdy się kliknie przejdzie do strony gdzie zdjęcie jest większe. Ale przy tym chcę aby w tym oknie były przyciski 'następne/poprzednie'. Chcę zrobić sortowanie po pozycji i myślałem nad tym, żeby dać zapytanie dla 'next' typu 'POZYCJA aktualnego rekordu + 1' ale może być tak, że kolejny rekord będzie o dwa wyższą pozycją dlatego zrobi się dziura. Jest coś takiego jak 'kolejny wyższy niż POZYCJA aktualnego rekordu'?
Sorry za trochę chaotyczną wypowiedzieć ale bardzo się spieszę.
Pozdrawiam
maly_swd
np masz aktualna_pozycje=45

chcesz poprzednia to robisz:
  1. SELECT pozycja FROM image WHERE pozycja<45 ORDER BY pozycja DESC

nastepna?
  1. SELECT pozycja FROM image WHERE pozycja>45 ORDER BY pozycja ASC
zegarek84
tak jak proponował Maly_swd tylko jeszcze na końcu dodaj LIMIT 1 [no prawie tak - zależy czy jako następne ma być starsze czy młodsze - bo jeśli starsze jako next to w odwrotnej kolejności i pozycja<45 - zależy w którą stronę pokazujesz winksmiley.jpg]

nie wiem jakie masz przechowywane informacje (dodatkowy tytuł czy coś co może jeszcze w alt linku chciałbyś zamieścić lub może inne informacje do powrotu na pager'a)

wiele informacji niby nie powiązanych ze sobą da się pobrać w jednym zapytaniu przy pomocy LEFT JOIN np. jak ja mam z newsami - mniejsza o nazwy - podam tylko przykład jako ogólną taką strukturę (ps. jeśli się da zoptymalizować zapytanie to możecie zarzucić ;p - nie wiem czemu przy count przewijało mi do innej pozycji i choć id mogłem wyciągnąć przez min lub max to gubiło inne informacje i trza było kolejne podzapytanie ;/)

  1. /**
  2.  *
  3.  * @param int $id
  4.  * @return boolean true jeśli pobierze newsa o tym $id false jeśli brak
  5.  */
  6. public function newsGet($id) {
  7. $select=$this -> PDO -> prepare('

  1. SELECT nc.*, np.id_p, np.title_p, nn.id_n, nn.title_n, (c.news_count_all - nn.where_id_asc) AS where_id, c.news_count_all
  2. FROM (SELECT * FROM `news` WHERE `id`=:id LIMIT 1) AS nc
  3. LEFT JOIN (SELECT :id AS id_n_join, `id` AS id_n, `title` AS title_n, COUNT(`id`) AS where_id_asc FROM `news` WHERE `id`<:id ORDER BY `id` DESC LIMIT 1) AS nn ON nc.id=nn.id_n_join
  4. LEFT JOIN (SELECT :id AS id_p_join, `id` AS id_p, `title` AS title_p FROM `news` WHERE `id`>:id ORDER BY `id` ASC LIMIT 1) AS np ON nc.id=np.id_p_join
  5. LEFT JOIN (SELECT :id AS id_c_join, COUNT(`id`) AS news_count_all FROM `news`) AS c ON nc.id=c.id_c_join'

  1. );
  2. $select->execute(array(':id'=>(int) $id));
  3. $select=$select->fetch(PDO::FETCH_ASSOC);
  4. if($select) {$this->news = $select;
  5. $this->newsCountAll=$this->news['news_count_all'];
  6. unset ($this->news['news_count_all']);};
  7. return isset($this->news)?true:false;}
maly_swd
zegarek84-> tak, masz racje z tym limitem:) , zapomnialem o tym... co do next i prev... to tez pisalem z palca i moglem sie walnac:) - ale zasada jest pokazana jak zrobic

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