Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobieranie 20k rekordów
Forum PHP.pl > Forum > PHP
slawek19926
Witam.

Mam poważny problem. W bazie danych znajduje sie 12k+ rekordów i mam problem z wyświetleniem wszystkich rekordów (wyświetlają się, ale trwa to bardzo długo)

KOD strony.

Proszę o pomoc.

P.S.
Nie chcę rezygnować z dataTables.js
kapslokk
Się nie dziwie, że trwa to długo, przeglądarka ma problem z taką duża ilościa danych.
Google -> datatables.js large data i 2 link
slawek19926
Kod teraz wygląda tak i nadal jest problem :/
nospor
Nadal na raz pobierasz wszystkie dane z bazy... Zrozum, nie mozesz pobierac wszystkich danych i ich naraz wyswietlac.
slawek19926
To właśnie wiem, tylko nie wiem jak to ustawić. Jak ustawię LIMIT to na nic mi się to zda bo nie zobaczę wszystkich rekordów :/
nospor
No i wlasnie dlatego ajaxem miales zapodowac kolejne dane dla danej strony. A zamiast tego na zywca bez namyslu skopiowales przyklad do ktorego cie odeslano
slawek19926
Kombinuje ale za chińca niemam pojęcia jak sad.gif
nospor
Ten przyklad wydaje sie lepszy
https://datatables.net/examples/server_side/post.html

tylko ze ty masz tam wygenerowac dane z bazy a nie z tego co oni tam maja po stronie serwera. Od ktorego rekordu masz zaczac wysyla ci to w POST.
slawek19926
Dobrze rozumiem, że muszę zrezygnować z np:
  1. echo "<td>".$row['nazwa']."</td>";
itd?
nospor
Tak, masz zwracac teraz dane dla ajaxa czyli JSON. Na stronie masz przyklad jaki to ma byc JSON konkretnie
slawek19926
Czyli muszę skorzystać z tego?
  1. <?php
  2.  
  3. /*
  4.  * DataTables example server-side processing script.
  5.  *
  6.  * Please note that this script is intentionally extremely simply to show how
  7.  * server-side processing can be implemented, and probably shouldn't be used as
  8.  * the basis for a large complex system. It is suitable for simple use cases as
  9.  * for learning.
  10.  *
  11.  * See <a href="http://datatables.net/usage/server-side" target="_blank">http://datatables.net/usage/server-side</a> for full details on the server-
  12.  * side processing requirements of DataTables.
  13.  *
  14.  * @license MIT - <a href="http://datatables.net/license_mit" target="_blank">http://datatables.net/license_mit</a>
  15.  */
  16.  
  17. /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  18.  * Easy set variables
  19.  */
  20.  
  21. // DB table to use
  22. $table = 'datatables_demo';
  23.  
  24. // Table's primary key
  25. $primaryKey = 'id';
  26.  
  27. // Array of database columns which should be read and sent back to DataTables.
  28. // The `db` parameter represents the column name in the database, while the `dt`
  29. // parameter represents the DataTables column identifier. In this case object
  30. // parameter names
  31. $columns = array(
  32. array( 'db' => 'first_name', 'dt' => 'first_name' ),
  33. array( 'db' => 'last_name', 'dt' => 'last_name' ),
  34. array( 'db' => 'position', 'dt' => 'position' ),
  35. array( 'db' => 'office', 'dt' => 'office' ),
  36. 'db' => 'start_date',
  37. 'dt' => 'start_date',
  38. 'formatter' => function( $d, $row ) {
  39. return date( 'jS M y', strtotime($d));
  40. }
  41. ),
  42. 'db' => 'salary',
  43. 'dt' => 'salary',
  44. 'formatter' => function( $d, $row ) {
  45. return '$'.number_format($d);
  46. }
  47. )
  48. );
  49.  
  50. // SQL server connection information
  51. $sql_details = array(
  52. 'user' => '',
  53. 'pass' => '',
  54. 'db' => '',
  55. 'host' => ''
  56. );
  57.  
  58.  
  59. /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  60.  * If you just want to use the basic configuration for DataTables with PHP
  61.  * server-side, there is no need to edit below this line.
  62.  */
  63.  
  64. require( 'ssp.class.php' );
  65.  
  66. echo json_encode(
  67. SSP::simple( $_POST, $sql_details, $table, $primaryKey, $columns )
  68. );
nospor
jak sie upierasz to mozesz korzystac z ich klasy SSP, ale mozesz rownie dobrze miec swoj skrypt, ktory zwraca dane w ich formacie. Co ci latwiej
slawek19926
Działa smile.gif
Teraz pytanie jak za pomocą tego mam wykonać działania matematyczne, dodać input, oraz button?
nospor
A konkretnie o co ci chodzi?
slawek19926
Dokładniej o wyliczanie kwot brutto i po rabacie.

Jak też mam poprawić sortowanie tabeli bo nie działa, wyszukiwanie też nie, oraz pokazuje się komunikat "invalid JSON response" od 14 strony w zwyż.
nospor
Cytat
wyszukiwanie też nie, oraz pokazuje się komunikat "invalid JSON response" od 14 strony w zwyż.

Firefox->firebug->consola
i sobie popatrz co dostajesz od serwera
slawek19926
Problem w tym, że nic nie pokazuje :/
nospor
TO nic dziwnego ze masz invalid json response skoro nic nie wysylasz wink.gif
slawek19926
Tylko, że do 14 strony wszystko działa bez problemu.

edit:

Przy prawidłowej zmianie strony dostaję coś takiego:
  1. {draw: 19, recordsTotal: 12123, recordsFiltered: 12123,}
  2. data
  3. :
  4. [{id: "131", reference: "004-026", nazwa: "ZASUWNICA S-02 7.5", cena: "8.93", rabat: "0.00"},]
  5. draw
  6. :
  7. 19
  8. recordsFiltered
  9. :
  10. 12123
  11. recordsTotal
  12. :
  13. 12123
viking
Sprawdź co wysyłasz i odbierasz. Może po 14 stronach nie masz danych i tego nie obslużyłeś.
icemanwlkp
Czy nie lepiej te wyliczenia robić procedurą lub zapytaniem w bazie ?
slawek19926
Pewnie i lepiej, ale i tak nie mam zielonego pojęcia jak :/
nospor
wracajac do 14 strony. Patrzyles jaki request idzie do serwera ze zlymi stronami?
Wlaczyles logowanie wszystkich bledow?
slawek19926
Tzn co mi wywala w zakładce post?



nospor
tak
slawek19926
Może prościej jak podam link
kapslokk
Cytat(nospor @ 22.09.2016, 15:02:15 ) *
Wlaczyles logowanie wszystkich bledow?

viking
A poza tym nie ustawiłeś nagłówków odpowiedzi dla JSON.
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.