Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> konkretne zapytanie - zapytanie mysql, znajdowanie poprzedniego i nastepnego rekordu
hrehor
post
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 13.02.2007

Ostrzeżenie: (0%)
-----


pewnie post powinien byc w "przedszkolu", niemniej potrzebuje pomocy.

tworze galerie fotograficzna, i mam problem z zapytaniem mysql.
adres strony to: http://www.photography.kw.pl/

mam takie cos:
$query = "SELECT * FROM `photos` WHERE `".$nav."` = '".$value."'";
//gdzie $nav to np "category" lub "date", a value to np "arch" lub "people" lub np "2007-02-12"
$result = mysql_query($query);
$ilosc_fotek = mysql_num_rows($result); //to wiem ze nr ostatniego rekordu :-)

przy przegladaniu zdjec chcialbym zeby byly opcja ogladania zdjec nastepnego i poprzedniego wzgledem daty i kategorii. jak to najprosciej zrobic ?
jako zmienne mam na stronie wyciagniete pole z bazy danych [id] biezacego zdjecia. jak znalezc zdjecie poprzednie i nastepne ?
nie moge zrobic +1 i -1 bo id juz nie sa po kolei, a co dopiero pozniej. poza tym, chce zeby przy pierwszym "previous" przeskakiwal do ostatniego, a w ostatnim "next" do pierwszego.

mam nadzieje ze pomozecie,
pozdro
Hrehor
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
tomaszdurka
post
Post #2





Grupa: Zarejestrowani
Postów: 32
Pomógł: 1
Dołączył: 12.02.2007

Ostrzeżenie: (0%)
-----


$current to nie jest id (twój primary_key), tylko jest to po prostu numer kolejności rekordu z rekordów zwróconcyh przez zapytanie.

Do tego jest właśnie LIMIT.
Wytłumaczę.

Jeśli

  1. SELECT * FROM products

zwraca np. 10 rekordów to

  1. SELECT * FROM products LIMIT 0, 1

zwraca jeden i do tego pierwszy rekord.

  1. SELECT * FROM products LIMIT 1, 4

zwraca 4 rekordy począwszy od drugiego.

W tym przypadku pierwsza liczba to rekord od którego zaczynamy -1.
Dlatego właśnie jest tam -1.


[Po co jest zmienna $np?]
Jeśli chcesz funkcję to zrób to tak.


  1. function navigation($nav, $value, $current) {
  2. if ($current < 1) {
  3. // echo "Błędne foto pierwszy";
  4. return false;
  5. }
  6. $query = "SELECT * FROM photos WHERE " . $nav . " = '" . $value . "' ORDER BY " . $nav . " ASC LIMIT " . ($current - 1) . ", 18446744073709551615";
  7. // 18446744073709551615 to max mysql number
  8.  
  9. $result_nav = mysql_query($query_nav);
  10. $ilosc_fotek = mysql_num_rows($result_nav);
  11.  
  12. if (!$ilosc_fotek) {
  13. //echo "Drugi nav:".$nav." value".$value." np:".$np." current:".$current." id:".$id;
  14. return false;
  15. } elseif($current == 1) {
  16. $next = $current + 1;
  17. $prev = $ilosc_fotek;
  18. } elseif ($ilosc_fotek == 1) {
  19. $next = 1;
  20. $prev = $current -1;
  21. } else {
  22. $next = $current + 1;
  23. $prev = $current - 1;
  24. }
  25. $r_array['data'] = mysql_fetch_assoc($result_nav);
  26. $r_array['next'] = $next;
  27. $r_array['prev'] = $prev;
  28. return $r_array;
  29. }
  30.  
  31.  
  32. $_GET['photo_number'] = isset($_GET['photo_number']) ? $_GET['photo_number'] : 1; // ustalenie domyślnego photo_number jako 1
  33.  
  34. if($photo = navigation('category', 'arch', $_GET['photo_number'])) {
  35. // Przykładowo jeśli masz pole URL w tabeli zdjęć
  36. echo '<img src="' . $photo['data']['url'] . '" />';
  37. echo '<a href="' . $photo['prev'] . '">Poprzednie</a>';
  38. echo '<a href="' . $photo['next'] . '">Następne</a>';
  39. }



Ale jako $_GET['photo'_number'] używasz liczby z przedziału od 1 do ilości twoich fotek spełniających podane kryteria wyszukiwania np. względem kategorii.

PS. Dałem w HTML bo php escape'ował quote'y.

Ten post edytował tomaszdurka 14.02.2007, 13:10:50
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 6.10.2025 - 04:22