[php]żle działa limit w zapytaniu ORDER BY


(batmomobil) #1

Witam mam problem ponieważ zauważyłem,że po usunięciu rekordu z bazy wyświetla jedno zdjęcie kilka razy przechodząc na następną podstronę.W zapytaniu miałem WHERE i limit 3,po przejściu 3 zdjęć następna podstrona.Takie miałem zapytanie

$query = "SELECT id_foteczki, nazwa_foteczki, opis_foteczki, link_foteczki,czas_foteczki,osoby_foteczki FROM galeria3 WHERE id_foteczki>=$limit LIMIT 3";

,a tak zapisany limit

$limit = (isset($_GET['go']))?$_GET['go']:1; $back=''; if($limit>=3)

.Zamiast WHERE zastosowałem ORDER BY aby sortować po id.Tak zapisałem zapytanie

$query = "SELECT id_foteczki, nazwa_foteczki, opis_foteczki, link_foteczki,czas_foteczki,osoby_foteczki FROM galeria3 ORDER BY id_foteczki>=$limit DESC LIMIT 3";

ale jest wyświetla 3 zdjęcia,a po przejściu na następną podstronę 3 następne ale zaczyna wyświetlać 3 od początku które już były.Jak poprawić to???


(adpawl) #2

blabalbala WHERE warunek ORDER BY kolumna DESC LIMIT x


(batmomobil) #3

Zapisałem tak zapytanie i powtarza 1 zdjęcie na następnej podstronie,gdzie popełniłem błąd:

$query = "SELECT id_foteczki, nazwa_foteczki, opis_foteczki, link_foteczki,czas_foteczki,osoby_foteczki FROM galeria3 WHERE id_foteczki>=$limit ORDER BY id_usera DESC LIMIT 3";

(adpawl) #4

Jeżeli to ma być paginacja, to dajesz LIMIT X, Y...gdzie X to nr rekordu początkowego a Y to krok

przykładowo LIMIT 0, 5 zwróci pierwsze pięć rekordów, zaś LIMIT 10, 8 zwróci osiem, począwszy od dziesiątego.

Jeżeli więc ma dzielić po 3 rekordy, to w miejsce Y dajesz 3, a w miejsce X zmienną, w której sobie wyliczasz zależnie od numeru strony krotność trójki.


(batmomobil) #5

Limit już działa,tylko mam pytanie jak zapisać ten limit tak aby po przejściu next nie pojawiała się dalej pusta podstona,tylko zatrzymał się limit na ostatnim zdjęciu i wyświetliło tylko back???


(adpawl) #6

Na samym początku pobierz sobie ilość wszystkich rekordów, na tej podstawie łatwo policzysz ile będziesz miał wszystkich stron.

Mając to info łatwo sobie będziesz mógł ograniczyć stronicowanie.

W sieci jest też od groma gotowych skryptów stronicowania, więc możesz sobie jakiś wybrać i zastosować albo podglądnąć jak to w nim jest zrobione.


(batmomobil) #7

Tak tylko jak ktoś doda nowy rekord,to skąd będziesz wiedział ile będzie rekordów!!!chodzi mi o to aby skrypt nie przeskakiwał dalej???tylko kończył na ostatnim dodanym rekordzie.


(adpawl) #8

Wybacz, ale nie rozumiem twojego problemu.

Przyjmując nawet sytuację, że w czasie od wygenerowania stronicowania zostanie dodanych X rekordów, to i tak nie zostaną one uwzględnione ...bo zostaną odcięte nałożonymi ograniczeniami liczby rekordów i liczby stron pobranych/wyliczonych na początku.

Tym bardziej, ze paginacja jest (re)generowana zazwyczaj przy każdym odświeżeniu strony.

Teraz przykład: zanim wygenerujesz linki stronicowania pobierasz liczbę rekordów, zwraca dajmy 100, dzielisz 10/str ...masz zatem 100:10 = 10 stron ...i już nie problem sobie ograniczyć <=100 czy <=10 -prawda? ...a jeżeli coś zostanie dodane w międzyczasie, to jako niespełniające ww. warunków nie zostanie uwzględnione ...no chyba ze po odświeżeniu.

Powtarzam, jeżeli masz problem ze zrozumieniem lub zakodowaniem tego, to zerknij na jakiś gotowiec. Jest tego od groma w sieci, wystarczy wstukać w google np php mysql pagination