Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php][mysql] kolejkowanie do wyswietlania zapytań, po wykonaniu jednego zapytanie zaczyna robić drugie
orzeleagle
post
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 29.05.2016

Ostrzeżenie: (0%)
-----


witam,
potrzebuje pomocy, ogólnie plik wygląda tak:

  1.  
  2. <?php
  3. require "polaczenie_z_baza.php";
  4. polaczenie_z_baza(); // połączenie z bazą
  5.  
  6.  
  7. /* zad 4 */
  8. $a1 = mysql_query("SELECT STDDEV_POP(author_publications) FROM
  9. (SELECT COUNT(t1.id_autora) AS author_publications, t1.id_autora FROM tab_lacz1 t1, tytul t
  10. WHERE
  11. t.rok_wydania>1981 AND
  12. t.rok_wydania<1985 AND
  13. t.id_tytulu = t1.id_tytulu
  14. GROUP BY t1.id_autora) A");
  15. $a1 = mysql_fetch_assoc($a1);
  16.  
  17. $a2 = mysql_query("SELECT STDDEV_POP(author_publications) FROM
  18. (SELECT COUNT(t1.id_autora) AS author_publications, t1.id_autora FROM tab_lacz1 t1, tytul t
  19. WHERE
  20. t.rok_wydania>1981 AND
  21. t.rok_wydania<1990 AND
  22. t.id_tytulu = t1.id_tytulu
  23. GROUP BY t1.id_autora) A");
  24. $a2 = mysql_fetch_assoc($a2);
  25.  
  26. /* i tak dalej masa zapytań
  27.   ..........................
  28.   ..........................
  29.   ..........................
  30.   ..........................
  31.   ..........................
  32. */
  33.  
  34.  
  35. /* i tutaj mam duża tabelkę w której wyświetlam wynik z tych wszystkich zapytań */
  36.  
  37. <table class="textwhite" align="center" border="1">
  38. <tbody><tr>
  39. <td>Standard deviation: publication/author</td>
  40. <td>'.$a1['STDDEV_POP(author_publications)'].'</td>
  41. <td>'.$a2['STDDEV_POP(author_publications)'].'</td>
  42. <td>'.$a3['STDDEV_POP(author_publications)'].'</td>
  43. <td>'.$a4['STDDEV_POP(author_publications)'].'</td>
  44. <td>'.$a5['STDDEV_POP(author_publications)'].'</td>
  45. <td>'.$a6['STDDEV_POP(author_publications)'].'</td>
  46. <td>'.$a7['STDDEV_POP(author_publications)'].'</td>
  47. </tr>
  48. </tbody></table>
  49.  


i jest tak, że strasznie dużo czasu potrzeba na wczytanie tych wszystkich danych. W tym kodzie potrzebuje pomocy z tym żeby te dane wczytywany się pojedynczo ale dynamicznie, czyli na początku pokazuje się jeden wynik, zaraz kolejny i tak dalej aż załaduje się cała tabela.

Czy jest ktoś wstanie pomóc?

Ten post edytował orzeleagle 23.01.2018, 17:19:00
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Pilsener
post
Post #2





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Podłącze się, bo może komuś się przyda:
  1. FROM tab_lacz1 t1, tytul t
- coś takiego nie powinno być w ogóle dopuszczalne w mysql, to tworzy iloczyn tabel, czyli jak masz w jednej 100 rekordów a w drugiej 1000 to w wyniku będzie 100 000 rekordów.
Kolejna rzecz: używanie zapytań SELECT bez klauzuli LIMIT. Jest to złe, ponieważ zawsze wybieramy całą tabelę co natychmiast zabije performance kiedy tylko liczba danych wzrośnie. Gdy używa się ORMa (np. Doctrine) można sobie ustawić to automatycznie (np. jeśli nie ma klauzuli limit to z automatu jest 999).
Następna sprawa: jeśli potrzebujemy dokładnych danych typu liczba rekordów, rozbudowanych raportów etc. to nigdy nie odpytujemy bazy z poziomu aplikacji PHP, tylko używamy specjalnego narzędzia do kolejkowania zadań (np. Rabita), silnika do danych (np. Lucyny) i aplikacji/skryptów ładujących dane z bazy. Liczbę zapytań wtedy ustawiamy stosownie do naszych możliwości i jest to kompletnie niezależne od aplikacji PHP i liczby użytkowników na stronie, w aplikacji produkcyjnej odświeżenie strony nie powinno generować zapytań do baz danych.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 17.10.2025 - 08:01