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%)
-----


Witam tak na szybko to można zrobić to tak:

  1. <?php
  2. $current = $_GET['current_photo'];
  3. if ($current < 1) {
  4. die("Błędne foto");
  5. }
  6. $query = "SELECT * FROM `photos` WHERE `" . $nav . "` = '" . $value . "' ORDER BY " . $nav . " ASC LIMIT " . ($current - 1). ", 18446744073709551615"; // 18446744073709551615 to max mysql number
  7. $result = mysql_query($query);
  8. $ilosc_fotek = mysql_num_rows($result); 
  9.  
  10. if (!$ilosc_fotek) {
  11. die("Błędne foto");
  12. } elseif($current == 1) {
  13. $next = $current + 1;
  14. $prev = $ilosc_fotek;
  15. } elseif ($ilosc_fotek == 1) {
  16. $next = 1;
  17. $prev = $current -1;
  18. } else {
  19. $next = $current + 1;
  20. $prev = $current - 1;
  21. }
  22. ?>


Tutaj szukasz zdjęcia po danych kryteriach, potem wybierasz pierwsze, określone przez $_GET['current_photo'].
Jeśli jako current dasz ujemną albo liczbe większą niż jest zdjęć w wyszukiwanych kryteriach MySQL zwróci komunikat błednego photo.
Jako następną fotkę zastosuj $next jako poprzednią $prev.
Go to the top of the page
+Quote Post
hrehor
post
Post #3





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

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


Dzieki za szybka odpowiedz. Przyswoilem kod, wkleilem na strone... no i dziala :-) ale nie do konca :-/
kod dziala... ale tylko na id=1 i id=2, pozniej wywala sie na drugim bledzie, co znaczy ze zapytanie SQL nie dziala...
Co oznacza wpis "($current - 1)" w zapytaniu SQL ? zakladam ze mam id w bazie danych o nastepujacych numerach 1, 2, 3, 4, 8 (tak mam). to czy jezeli wezmiemy 8, to wynikiem zapytania bedzie 7? jesli tak, to bez sensu (chodzilo mi o przeskoczenie rekordu, a nie odjeciu wartosci, poniewaz numery nie beda pokolei w bazie).
poza tym calosc kodu wyrzucilem do includowanego pliku (functions.php) i zrobilem z niego funkcje:

navigation ($nav,$value,$np,$current)
gdzie $current to wartosc $id (ogladana fotka)
a $np to next lub prev

  1. <?php
  2. function navigation($nav,$value,$np,$current) {
  3. // help od usera tomaszdurka z php.pl
  4. /*$nav = "category";
  5. $value = "arch";
  6. $np = "next"
  7. $current = $id;*/
  8.  
  9. if ($current < 1) {
  10. die("Błędne foto pierwszy");
  11. }
  12. $query_nav = "SELECT * FROM `photos` WHERE `".$nav."` = '".$value."' ORDER BY `".$nav."` ASC LIMIT ".($current - 1).", 18446744073709551615"; // 18446744073709551615 to max mysql number
  13. $result_nav = mysql_query($query_nav);
  14. $ilosc_fotek = mysql_num_rows($result_nav); 
  15.  
  16. if (!$ilosc_fotek) {
  17. echo "Drugi nav:".$nav." value".$value." np:".$np." current:".$current." id:".$id;
  18. } elseif($current == 1) {
  19. $next = $current + 1;
  20. $prev = $ilosc_fotek;
  21. } elseif ($ilosc_fotek == 1) {
  22. $next = 1;
  23. $prev = $current -1;
  24. } else {
  25. $next = $current + 1;
  26. $prev = $current - 1;
  27. }
  28.  
  29. if ($np = "next"){
  30. echo $next;
  31. }
  32. else
  33. echo $prev;
  34. }
  35. ?>


w kodzie strony do adresu hrefa
  1. <? navigation(ee_date,$row['ee_date'],prev,$id) ?>// - dla daty i zdjecia wstecz
  2. <? navigation(ee_date,$row['ee_date'],next,$id) ?>// - dla daty i zdjecia wprzod
  3.  
  4. <? navigation(category,$row['category'],prev,$id) ?>// - dla kategorii wstecz
  5. <? navigation(category,$row['category'],next,$id) ?>// - dla kategorii wprzod


zaznaczam ze na id=1 i 2 dziala, wiec skladania jest chyba ok
wiecej pomocy :-)
Hrehor
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: 11.10.2025 - 08:41