Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php][mysql] kolejkowanie do wyswietlania zapytań, po wykonaniu jednego zapytanie zaczyna robić drugie
orzeleagle
post 23.01.2018, 17:17:14
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
mmmmmmm
post 23.01.2018, 21:22:16
Post #2





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


1. Musisz mieć 3 indeksy (to znacznie przyspieszy):
- tytul.id_autora
- tab_lacz.id_autora
- tytul.rok_wydania
2. Użyj JOIN - to równiez powinno przyspieszyć.
3. Bierz wszystko na raz - lepiej jest wykonać raz, a nie 12 razy.
Zapytanie powinno wyglądać mniej więcej tak:
  1. SELECT
  2. STDDEV_POP(author_publications1) o1,
  3. STDDEV_POP(author_publications2) o2,
  4. STDDEV_POP(author_publications3) o3, ...
  5. FROM
  6. (SELECT
  7. t1.id_autora,
  8. COUNT(case when t.rok_wydania>1981 AND t.rok_wydania<1985 then t1.id_autora end) AS author_publications1,
  9. COUNT(case when t.rok_wydania>1981 AND t.rok_wydania<1990 then t1.id_autora end) AS author_publications2,
  10. COUNT(case when t.rok_wydania>1981 AND t.rok_wydania<1995 then t1.id_autora end) AS author_publications3, ...
  11. FROM tab_lacz1 t1 JOIN tytul t ON t.id_tytulu = t1.id_tytulu
  12. WHERE
  13. t.rok_wydania>[Minimalny rok] AND
  14. t.rok_wydania<[Maksymalny rok]
  15. GROUP BY t1.id_autora) A
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Wersja Lo-Fi Aktualny czas: 26.06.2025 - 08:16