![]() |
![]() ![]() |
![]() |
![]()
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 |
|
|
![]()
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:
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. |
|
|
![]()
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
w kodzie strony do adresu hrefa zaznaczam ze na id=1 i 2 dziala, wiec skladania jest chyba ok wiecej pomocy :-) Hrehor |
|
|
![]()
Post
#4
|
|
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
zwraca np. 10 rekordów to
zwraca jeden i do tego pierwszy rekord.
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.
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 |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 401 Pomógł: 5 Dołączył: 14.09.2003 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
Takie rozwiązanie w sql'u mi pryzszło do głowy, moze trzeba troche pokombinowac, ale jezeli trzeba tylko pobrac rekord z tymi "dookola" to to moze byc dobra droga. Ten post edytował bendi 14.02.2007, 14:39:36 -------------------- |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 13.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. wstawilem, ale nie dziala. pewnie dlatego ze nie rozumiem, jak zrozumiem to pewnie zadziala :-) nie kumam zmiennej $_GET['photo_number'] - co to jest ? w tablicy GET jedyna wartoscia przekazywana jest $id, a skoro to nie jest photo_number to on (photo_number) zawsze bedzie rowny 1 (domyslna ustawiona wartosc). jesli $current jest numerem kolejnosci rekordu to chyba nie moze wystepowac w samym zapytaniu, bo wowczas (przed zapytaniem) ma wartosc nieokreslona. $current zostaje okreslony dopiero po zapytaniu, tak ? pozdro Hrehor
Takie rozwiązanie w sql'u mi pryzszło do głowy, moze trzeba troche pokombinowac, ale jezeli trzeba tylko pobrac rekord z tymi "dookola" to to moze byc dobra droga. O to mi chodziło :-) mniej więcej, ale pchnęło na dobre tory. Po cały skrypt zapraszam do odp. dla tomaszadurka dzięki i pozdro Hrehor nie wiem czemu odp dla usera bendi znalazla sie tutaj... niewazne udalo mi sie w koncu napisac te funkcje. wyglada tak
a w kodzie strony jest tak
nie podoba mi sie w kodzie ze sa az 4 zapytania do bazy sql... pewnie da sie to uproscic. najwazniejsze ze dziala tak jak chcialem. chociaz musze przyznac ze popelnilem blad w zalozeniu - mianowicie teraz przegladanie zdjec wg $nav - ee_date, przeskakuje pomiedzy zdjeciami ktore maja te sama date. lepiej by bylo gdyby przeskakiwalo pomiedzy zdjeciami w calej bazie danych. ale teraz to pryszcz, tylko ze bedzie potrzebna nowa funkcja i zapytan do bazy bedzie 8. dzieki za odpowiedzi pozdro Hrehor naszla mnie jeszcze jedna rzecz, apropos zapytan sql z ktorych tu skorzystalem. skoro zapytanie: SELECT * FROM `photos` WHERE `id` < ".$id." AND `category` = 'arch' ORDER BY `id` ASC zwraca wszystkie rzedy bazy danych z kategorii arch o id mniejszym od podanego, to powinna byc funkcja php pozwalajaca sie dostac zarowno do pierwszego jak i ostatniego rzedu. wiem juz, ze funkcja mysql_fetch_row($query); zwroci pierwszy rzad. czy istnieje jakas ktora zwroci ostatni? wtedy zapytan do bazy mialbym dwa razy mniej pozdro Hrehor |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 32 Pomógł: 1 Dołączył: 12.02.2007 Ostrzeżenie: (0%) ![]() ![]() |
A ja się tu staram żeby jedno zapytanie było...
![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 13.08.2025 - 22:52 |