Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Listowanie
Forum PHP.pl > Forum > PHP
Zagiewa
Witam. Potrzebuje nauczyć się listować rekordy z bazy SQL. Problem polega na tym, że w teorii mniej więcej wiem jak to ma wyglądać ale nie potrafię nic sklecić co by działało. Więc jak już wspomniałem nie szukam gotowca a porad. Do tej pory mam jakiś zaczątek kodu który wydaje się być w pełni poprawny a wygląda tak:
  1. $sql = "SELECT id, tytul FROM news";
  2. $result = mysql_query($sql) or
  3. die("Sprawdź wynik! " . mysql_error());
  4.  
  5. $sql2 = "SELECT COUNT(*) FROM news";
  6. $result2 = mysql_query($sql2) or
  7. die("Sprawdź wynik! " . mysql_error());
  8. $ilosc = mysql_result($result2,0);

Oczywiście przed tym wszystkim jest jeszcze fragment kodu który łączy mnie z bazą ale myślę, że nie ma potrzeby go podawać. Co to napisałem działa ale moje pierwsze pytanie: czy z tych dwóch zapytań do bazy nie da się zrobić jednego?
IceManSpy
A po co robisz to pierwsze zapytanie, skoro w drugim pobierasz wszystko z tabeli news?
sniver
akurat w przypadku tych 2 zapytań da się. Na końcu nie masz limitu więc jeśli będziesz mieć 1000 ńusów to i tak za każdym razem wszystkie 1000 się pojawi smile.gif

co do wylistowania tego musisz jeszcze odczytać to co ci wynik zapytania zwrócił - czyli funkcja mysql_fetch_row (o ile dobrze pamietam, bo dawno nie robiłem w procedurkach)
Zagiewa
Jak to w drugim zapytaniu pobieram wszystko? W drugim zapytaniu jedynie zliczam. Podane w funkcji COUNT(id, tytul) nic mi nie da bo jak później z tego odczytam? Po za tym taki kod:
  1. $sql2 = "SELECT COUNT(id, tytul) FROM news";
  2. $result2 = mysql_query($sql2) or
  3. die("Sprawdź wynik! " . mysql_error());
  4. $ilosc = mysql_result($result2,0);

Wywala mi błąd:
  1. Warning: mysql_result(): supplied argument is not a valid MySQL result resource in ...\httpd-users\news\test.php on line 45
kryspuss
Cytat
Jak to w drugim zapytaniu pobieram wszystko? W drugim zapytaniu jedynie zliczam.

W drugim pytaniu faktycznie pobierasz wszystko gdyż nie zawiera ona np. klauzuli WHERE ograniczającej pobierane rekordy.

Pierwsze pytanie pobiera 2 kolumny i wszystkie rekordy, natomiast drugie zapytanie pobiera także wszystkie rekordy ale i wszystkie kolumny, a więc 2 zapytanie pobiera więcej danych niż 1.
W twoim przypadku wystarczyło zapytać ile wierszy pobrało 1 pytanie
  1. $ilewierszy = mysql_num_rows($result1);


ps. źle używasz funkcji count, poczytaj o COUNT
Zagiewa
kryspuss Dzięki, to jedno mam już za sobą. Zacząłem pisać dalej ale natknąłem się na kolejną przeszkodę. Najpierw jednak pokaże co mam:
  1. $sql = "SELECT id, tytul FROM news";
  2. $result = mysql_query($sql) or
  3. die("Sprawdź rezultat! " . mysql_error());
  4. $ilewierszy = mysql_num_rows($result);
  5.  
  6. $na_stronie = 5; //ilosc wierszy wieswietlanych na jednej stronie
  7. $ile_stron = $ilewierszy/$na_stronie; //ilosc stron
  8. $lp = 1; //wartosc poczatkowa liczby porzadkowej ktorej wartosc bedzie rozla o 1 z kazdym kolejnym wyswietlanym wpisem
  9. $wiersze = 1; //wartosc od ktorej maja byc wyswietlane rekordy z bazy

Jak widać z dwóch zapytań zostało jedno + dodałem zmienne które myślę, że są niezbędne chociaż to wyjdzie z czasem. Do tej pory ucząc się listowania uczyłem się na pętli for gdzie zmienna "x" miała wartość 100 i była to ilość tak jak by rekordów i jakoś działało. Tutaj jednak muszę stworzyć taką pętlę, która pobierze tylko pierwsze 5 rekordów z bazy, wyświetli je i zatrzyma się. Problem w tym, że nie wiem jak taką pętlę skonstruować.

Do tej pory do wypisywania rekordów używałem pętli while gdzie wyglądała tak:
  1. while($wypisz = mysql_fetch_array($result))

Oczywiście pętle while można zatrzymać ale nie da się później jej wznowić od miejsca w którym się zatrzymała. Mam rację? Dlatego wyjściem jest petla for bo mogę skonstruować bardziej złożony warunek ale jaki i tu jest problem. Może jakieś porady bo do tej pory napisałem coś takiego ale nie działa sad.gif
  1. for($wiersze; $wiersze <= $na_stronie; $wiersze++) {
  2.  
  3. $wypisz = mysql_fetch_array($result);
  4. $id = $wypisz['id'];
  5. $tytul = $wypisz['tytul'];
  6.  
  7. echo '
  8. <tr>
  9. <td>' .$lp. '</td><td>' .$tytul. '</td><td>Edycja</td><td>Komentarze</td>
  10. </tr>
  11. ';
  12.  
  13. $lp++;
  14. }
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.