Dzielenie wynikół SQL na strony


(tomi001) #1

Mam pewien problem jest np. 107 wpisów w bazie danych i ja chce, żeby na stronie pojawiło się tylko 10 wpisów albo 7 i chce też dodrukować hiperłącza, żeby to wyglądało tak

Oczywiście mamy się rozumieć, że na 1 stronie pojawią się wpisy od 1 do 10 na drugiej od 11 do 20 to, że drukuje tyle stron ile jest wpisów udało mi się zrobić jednak u mnie jest tak że na pierwszej stronie drukuje od 1 do 10 a na 2 od 12 do 14. Jak zrobić to dobrze ?


(Sawyer47) #2

Wiele systemów bazodanowych oferuje rozszerzenie pozwalające na pobranie jedynie części wyników zapytania

Np. w PostgreSQL jest to LIMIT i OFFSET: http://www.postgresql.org/docs/9.2/stat … limit.html

Jeśli u Ciebie coś działa źle, to pokaż kod, bez tego trudno wróżyć, co jest nie tak.


(tomi001) #3

Chodzi mi o to, że jak jest np. 111 rekordów SQL i mamy takie zadanie wydrukować te rekordy na tylu stronach, żeby je wszystkie wydrukować i tak, żeby na 1 stronie było maksymalnie 10 rekordów.


(Drobok) #4

Czy ty w ogóle przeczytałeś ten link który podał ci nr47 ? Dajesz limit od ilość na stronie *nr strony -1, ilość na stronie * numer strony,

Poza tym na forum taki temat był i jak chcesz gotowca wystarczy użyć szukajki.


(tomi001) #5

Próbowałem z tym, ale dzisiaj nie dało rady.


(Rolek0) #6

@tomi001 I dobrze by było jakbyś napisał jakiego systemu bazodanowego używasz :wink:


(tomi001) #7

MySQL


(B.Andy) #8
SELECT * FROM `your_table` LIMIT [OD], [Ile rekordów]

np. LIMIT 0, 10 (pierwsze 10), LIMIT 10, 10 (kolejne)

W hiperłączach musisz przesyłać informację, od którego wyniku ma wypisywać.


(tomi001) #9

Jak mam coś takiego to nie chce mi sortować nie wiem czemu


(B.Andy) #10

Zawsze jak zapytanie nie chce działać, wypisz je sobie “echem” i wklej do np. Phpmyadmin’a czy MySQL Workbench, czy czegokolwiek co pokaże ci błąd w zapytaniu.

Masz w zapytaniu $_GET[strona], brakuje apostrofów. Aczkolwiek nie jestem pewien czy teraz już zadziała, czy przypadkiem w PHP w cudzyslowiach nie można używać tablic.

$strona = $_GET['strona'];

$query = " select id,user,co_robil,data,os,przegladarka,ip,system from statystyki limit 0, $strona ORDER BY od";

Ale w tym ciągle jest błąd. Teraz strona jest podatna na ataki SQL injection, musisz jakoś zabezpieczyc zmienną $strona, np. MySQL_real_escape_string


(Drobok) #11

B.Andy, zaprzeczasz sam sobie. Pierw piszesz poprawnie, a potem kopiujesz kod z błędem. Nie masz zaczynać od 0, tylko od nr strony*ilość elementów, a wyświetlić masz ilość elementów .

PS Nie jestem pewien, ale takie sortowanie po id (o ile jest to klucz główny) jest domyślne. A co do tych apostrofów, zależy jak wywołujesz zapytanie.


(etam) #12

@B.Andy

Z innej beczki: Co jeżeli $_GET[‘strona’] będzie zawierać “; drop table statystyki; --” ? To się nazywa SQL Injection.

Jedyna słuszna metoda wprowadzania danych od użytkownika: http://www.php.net/manual/en/mysqli.prepare.php


(B.Andy) #13

@up

Przeczytaj cały post :slight_smile: fakt faktem, że prepared statements jest lepsze os takich funkcji.

@ drobok

Głupi błąd ;d tak to jest jak się na wpół śpi, dzięki za zwrócenie uwagi :slight_smile: