Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Stronicowenie problem to wywaleniu
Forum PHP.pl > Forum > PHP
Lejto
Mam kod stronicowania i tabele:
Kod
+------------------------------+
|obraz | dodal | numer | id  |
+------------------------------+
|foto1.jpg | Lukasz | 2 | 1   |
|foto3.jpg | Lukasz | 2 | 2   |
|foto4.jpg | Lukasz | 2 | 3   |
|foto2.jpg | Lukasz | 2 | 4   |
+-------------------------------+

I stronicowanie działa ok (numer w tabeli to jest numer id w profilu, id usera z tabeli uzytkownik gdzie są zalogowani user'rzy)
Problem pojawi się wtedy
1) gdy ktoś usunie zdjęcie i id nie będą poklei
2) albo kto ś doda 2 zdjęcia i ktoś inny następne 2
wtedy tabela będzie wyglądać tak
Kod
+------------------------------+
|obraz | dodal | numer | id  |
+------------------------------+
|foto1.jpg | Lukasz | 2 | 1   |
|foto4.jpg | Lukasz | 2 | 3   |
|foto2.jpg | Lukasz | 2 | 4   |
+-------------------------------+

albo
Kod
+------------------------------+
|obraz | dodal | numer | id  |
+------------------------------+
|foto1.jpg | Lukasz | 2 | 1   |
|foto3.jpg | Zdzisiu | 2 | 2   |
|foto4.jpg | Lukasz | 2 | 3   |
+-------------------------------+

Rozwiązanie: przy stronicowaniu kolejne dodane id to id zdjęcia danej osoby (nie poklei) ale jak to zrobić?
Kod stronicowania:
  1. <?php
  2.  
  3. function stronnicoj() { // ile danych ma byc na kazdej stronie
  4.  
  5. // polaczenie z baza
  6.  $id = $_GET['id'];
  7.  $nr = $_GET['nr'];
  8.  $liczba = 2;
  9.  
  10. $sql_0 = mysql_query("select * from uzytkownik where id = '$id'"); // pobiera id uzytkownika 
  11. $dane = mysql_fetch_array($sql_0);
  12.  
  13.  
  14. $zapytaj = mysql_query("select * from galeria_users where id = '$id'"); //pobiera id zdjęcia
  15. $row_1 = mysql_fetch_array($zapytaj);
  16.  
  17. $dodal = $row_1[dodal];
  18. $numer = $row_1[numer];
  19.  
  20.  $query = ("select * from galeria_users where numer ='$numer'"); //pobiera wcześniej wspomniany numer
  21. $wynik = mysql_query($query) or die(mysql_error());
  22. $num = mysql_num_rows($wynik);
  23. $ile = ceil($num/$liczba);
  24.  
  25. if(!isset($_GET['id'])) $_GET['id'] = 0;
  26.  
  27. $strona = (int)$_GET['id'];
  28.  $zap = ("select * from galeria_users where numer ='$numer'");
  29. $ris = mysql_query($zap) or die(mysql_error());
  30.  
  31.  $sql = mysql_query("select * from galeria_users where id = '$id'");
  32.  $row = mysql_fetch_array($sql);
  33.  $sql_2 = mysql_query("select * from uzytkownik where user = '$row[dodal]'");
  34.  $row_2 = mysql_fetch_array($sql_2);
  35.  
  36.  $dana = $row_2[id];
  37. echo '<br><br>';
  38. //stronicuje
  39. if(is_numeric($strona) && !empty($strona) && $strona > 1) {
  40.  echo('<span id="font"><center><a href="foto_zoom.php?foto=pokaz&id='.($strona-1).'=osoba&nr='.$dana.'"> << Poprzednie</a></span></center> ');
  41.  }
  42.  
  43.  
  44.  
  45.  if(is_numeric($strona) && !empty($strona) && $_GET['id'] < $num) {
  46.  echo('<center><span id="font"><a href="foto_zoom.php?foto=pokaz&id='.($strona+1).'=osoba&nr='.$dane[id].'">Następne >> </a></center></span>');
  47.  }
  48.  
  49. }
  50. ?>

edit:
id jest po kolei 1,2,3,4 stronicowanie działa jak id jest 1,2,4,5 to nie działa widzi tą usuniętą 3 a ma jej nie być mają się kolejno wyświetlać id (nawet jak są pomieszane (1,2,5,7,9) zdjęć danego usera
Kicok
Pobierz sobie największe id mniejsze od $_GET['id']
oraz najmniejsze id większe od $_GET['id']

Czyli google.pl -> kurs SQL -> WHERE, ORDER BY, LIMIT.


Można to oczywiście wykonać przy użyciu jednego zapytania, ale jak widzę optymalizacja kodu nie jest dla ciebie jakimś priorytetem, więc czytanie o UNION możesz sobie odpuścić ;]
Lejto
WHERE, ORDER BY, LIMIT znam dobrze potrzebuje pobrać następne id zdjęcia danego usera
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.