Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Pokazywanie rekordów w tabeli
Forum PHP.pl > Forum > PHP
mazyl
mam taki problem,
posiadam tabele 150 użytkowników, w której są różne informacje.
tabela jest podzielona na podstrony co 30 użytkowników.

Jak zrobić aby np gdy w spis tabeli wejdzie użytkownik o ID = 80,
żeby mu sie pokazała 3 podstrona tabeli w której on sie znajduje ?
skowron-line
Musisz pobrać z tabeli wszystkie rekordy a póżniej utworzyć tablicę z ID coś w stylu
  1. $pages = array(
  2. 1 => array(1, 2, 3, 4), // tyle ID ile rekordów na stronie
  3. 2 => array(5, 6, 7, 8),
  4. 3 => array(9, 10, 11, 12)
  5. );


i po wejściu na stronę strawdzać w którym przedziale znajduje się ID usera
Kshyhoo
Generalnie, nazywa się to paginacja lub stronicowanie.
wujek2009
Ona ma już paginacje.
Jeśłi chodzi o rozwiązanie to może spróbuj utworzyć zapytanie podobne do => http://nospor.pl/mysql-faq.html#faq-8
Kshyhoo
mazyl, to chyba rodzaj męski. Napisałem o paginacji, bo nie znamy kodu a temat tego dotyczy. Wystarczy dobrać, od jakiego rekordu mają się pokazywać dane...
potreb
Cytat(skowron-line @ 5.02.2012, 18:49:02 ) *
Musisz pobrać z tabeli wszystkie rekordy a póżniej utworzyć tablicę z ID coś w stylu
  1. $pages = array(
  2. 1 => array(1, 2, 3, 4), // tyle ID ile rekordów na stronie
  3. 2 => array(5, 6, 7, 8),
  4. 3 => array(9, 10, 11, 12)
  5. );


i po wejściu na stronę strawdzać w którym przedziale znajduje się ID usera


A nie lepiej pobrać count id do tego właściwego (80) podzielić to na ilość rekordów ile ma być wyświetlanych na stronę i mamy wynik numeru strony.
mazyl
Kurcze mam z tym problem sad.gif

  1. <?php
  2. $start = (int)$_GET['start'];
  3. if(empty($_GET['start'])) $start = 0;
  4.  
  5. <table style='margin:0 auto'>
  6. <tr>
  7. <th>pozycja</th>
  8. <th>gracz</th>
  9. <th>Level</th>
  10. <th>Gildia</th>
  11. <th>Walka</th>
  12. <th>Zaproszenia</th>
  13. </tr>
  14.  
  15. ";
  16. $query = mysql_query("select * from gamecms_gracze order by poziom desc limit ".$start.",10");
  17. while($dane = mysql_fetch_array($query)){
  18. $i++;
  19. $gt = mysql_fetch_array(mysql_query("select * from gildia where id = ".$dane['gildia'].""));
  20. if($dane['gildia'] == 0) { $gildia2 = "-"; } else {
  21. $ng = mysql_fetch_array(mysql_query(" select * from gildia where id = ".$dane['gildia'].""));
  22. $gildia2 = "<a href='?a=infogildia&id=".$gt['nazwa']."'>".$ng['nazwa']."</a>";
  23. }
  24. if($oGracz['gildia'] == 0) { $gildia = "-"; } else {
  25. if($dane['gildia'] == $oGracz['gildia']) $gildia = "-";
  26. else $gildia = "<a href='?a=zaproszenia&zapros=".$dane['gracz']."'>Zaproś do Gildii</a>";
  27. }
  28. if($dane['gracz'] == $oGracz['gracz']) { $akcja = "-"; }
  29. else {
  30.  
  31. if($dane['gildia'] == $oGracz['gildia']) $akcja = "<a href='?a=walka&wyzwij=".$dane['gracz']."' onclick='return confirm('Czy chcesz zaatakować Gracza z twojej Gildii? ')'>Walcz</a>";
  32. else $akcja = "<a href='?a=walka&wyzwij=".$dane['gracz']."'>Walcz</a>";
  33. }
  34. echo "
  35. <tr align='center'>
  36. <td>".($start + $i)."</td>
  37. <td><a href=?a=gracz&id=".$dane['login'].">".$dane['login']."</a></td>
  38. <td>".$dane['poziom']."</td>
  39. <td>".$gildia2."</td>
  40.  
  41. <td>".$akcja."</td>
  42. <td>".$gildia."</td>
  43. </tr>";
  44.  
  45.  
  46. }
  47. echo "</table>";
  48.  
  49.  
  50. $max = mysql_num_rows(mysql_query("select * from gamecms_gracze"));
  51.  
  52. if($max > 10){
  53. echo "<hr/>";
  54. for($j=0; $j < $max; $j = $j +10){
  55. $k++;
  56. echo "<p style='text-align:center; float:left; margin-right:5px;'><a href='?start=".$j."'>[".$k."]</a></p>";
  57. }
  58. }
  59.  
  60.  
  61. ?>


to jest caly kod. moż ktoś pomoże bo naprawde nie wiem jak to zrobić sad.gif
Kshyhoo
No tak, zmiennej $start musisz przekazać, którą dziesiątkę chcesz wyświetlić.

EDIT. coś w stylu:
  1. $start = ($s - 1) * 10;

a $s to:
  1. $s = ($_GET['strona'] > 1) ? number_format($_GET['strona'], 0, '', '') : 1;
mazyl
czyli np jak gracz ma ID 80, to zxmienna start powinna mieć 80 ?
Kshyhoo
Powinna mieć "wartość -1".
mazyl
nie wiem czy działa, bo chyba mam coś z zapytaniem, bo sprawdzam to dopiero i mam 12 uzytkowników, gdy przechodzi na 2 podstrone, nie pokazuje mi graczy.
Kshyhoo
Podziel sobie np. po 3 lub 4 userów.
skowron-line
Cytat(potreb @ 5.02.2012, 19:32:49 ) *
A nie lepiej pobrać count id do tego właściwego (80) podzielić to na ilość rekordów ile ma być wyświetlanych na stronę i mamy wynik numeru strony.

Ajak będą dziury w numeracji questionmark.gif
Kshyhoo
Dlatego lepiej tak:
  1. $s = ($_GET["s"]>1)?number_format($_GET["s"], 0, "", "") : 1; // numer strony
  2. $na_stronie = 10; // liczba rekordów widocznych na stronie
  3.  
  4. $start = ($s-1)*$na_stronie;
  5. $wynik = mysql_query("SELECT SQL_CALC_FOUND_ROWS * FROM tabela LIMIT $start, $na_stronie");
  6. $rekordow = mysql_result(mysql_query("SELECT FOUND_ROWS()"),0);
  7.  
  8. $stron = ceil($rekordow/$na_stronie);
  9. if ($s>$stron and $rekordow>0) {
  10. $start = ($stron-1)*$na_stronie;
  11. $wynik = mysql_query("SELECT * FROM tabela LIMIT $start, $na_stronie");
  12. }
mazyl
Coś mi nie idzie.
nie moge poprawnie tego wszystkoiego połączyć. nie pokazuje mi rekordów.

ponieważ tam był jakiś bląd nie pokzywało dobrze nastepnych stron, użyłem czegoś takiego :
  1. <?php
  2. $s = ($_GET["s"]>1)?number_format($_GET["s"], 0, "", "") : 1;
  3. $count=5;
  4.  
  5. $offset = ($s-1)*$na_stronie;
  6.  
  7.  
  8. <table style='margin:0 auto'>
  9. <tr>
  10. <th>pozycja</th>
  11. <th>gracz</th>
  12. <th>Level</th>
  13. <th>Gildia</th>
  14. <th>Walka</th>
  15. <th>Zaproszenia</th>
  16. </tr>
  17.  
  18. ";
  19.  
  20. //Pobranie danych z $_GET jezsli ustawione
  21. if(isset($_GET['count']))$count = $_GET['count'];
  22. if(isset($_GET['offset']))$offset = $count*$_GET['offset']; //numer strony
  23.  
  24. //Pobranie liczby rekordów
  25. $sql = 'Select count(*) from gamecms_gracze';
  26.  
  27. $result = mysql_query($sql);
  28. $r = mysql_fetch_array($result);
  29. //Liczba stron, użycie ceil - zaokrąglenie w górę, w celu zapewnienia, że żadna strona się nie straci
  30. $pages = ceil($r[0]/$count);
  31.  
  32. //Pobranie odpowieniej paczki
  33.  
  34. $sql = "Select * from gamecms_gracze order by poziom desc Limit ".$count." offset ".$offset."";
  35.  
  36. $result2 = mysql_query($sql);
  37.  
  38. while($dane = mysql_fetch_array($result2)){
  39. $i++;
  40. $gt = mysql_fetch_array(mysql_query("select * from gildia where id = ".$dane['gildia'].""));
  41. if($dane['gildia'] == 0) { $gildia2 = "-"; } else {
  42. $ng = mysql_fetch_array(mysql_query(" select * from gildia where id = ".$dane['gildia'].""));
  43. $gildia2 = "<a href='?a=infogildia&id=".$gt['nazwa']."'>".$ng['nazwa']."</a>";
  44. }
  45. if($oGracz['gildia'] == 0) { $gildia = "-"; } else {
  46. if($dane['gildia'] == $oGracz['gildia']) $gildia = "-";
  47. else $gildia = "<a href='?a=zaproszenia&zapros=".$dane['gracz']."'>Zaproś do Gildii</a>";
  48. }
  49. if($dane['gracz'] == $oGracz['gracz']) { $akcja = "-"; }
  50. else {
  51.  
  52. if($dane['gildia'] == $oGracz['gildia']) $akcja = "<a href='?a=walka&wyzwij=".$dane['gracz']."' onclick='return confirm('Czy chcesz zaatakować Gracza z twojej Gildii? ')'>Walcz</a>";
  53. else $akcja = "<a href='?a=walka&wyzwij=".$dane['gracz']."'>Walcz</a>";
  54. }
  55. echo "
  56. <tr align='center'>
  57. <td>".($start + $i)."</td>
  58. <td><a href=?a=gracz&id=".$dane['login'].">".$dane['login']."</a></td>
  59. <td>".$dane['poziom']."</td>
  60. <td>".$gildia2."</td>
  61.  
  62. <td>".$akcja."</td>
  63. <td>".$gildia."</td>
  64. </tr>";
  65. }
  66. echo "</table>";
  67.  
  68. //Pętla po stronach
  69. for($i=0;$i<$pages;$i++){
  70. //jeśli obecna strona, nie twórz linku do strony
  71. if($i*$count==$offset){
  72. echo ' <font color="orange" ><b>['.$i.']</b></font> ';
  73. }else{
  74.  
  75. echo '<a href="index.php?a=ranking&count='.$count.'&offset='.$i.'"><font color="white" > ['.$i.'] </font></a>';
  76. }
  77. }
  78. ?>

Kshyhoo byś mi mógł to jakoś połączyć? probowałem sam ale cos mi nie idzie sad.gif z góry wielkie dzięki
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.