Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Skrócenie kodu / zapytań sql
kam821
post 22.12.2009, 20:47:18
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 1
Dołączył: 24.10.2009

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


Witam smile.gif
Mam do Was pewną prośbę, jako, iż nie jestem masterem w optymalizacji kodu, prosiłbym o najwydajniejsze rozwiązanie możliwego problemu, nawet w zmianie zapytania sql smile.gif
Poniżej kawałek mojego kodu:
  1. <?php
  2.  
  3. function generate_katalog_list() {
  4.  
  5. global $db;
  6.  
  7. $katalog_list = sql_cache('get', 'katalog_list');
  8. $subkatalog_list = sql_cache('get', 'subkatalog_list');
  9.  
  10. if(!$katalog_list) {
  11. $sql = "
  12. SELECT
  13. k.katalog_id,
  14. k.katalog_name,
  15. COUNT(p.produkt_id) AS katalog_productnum
  16. FROM
  17. " . DB_KATALOG . " k,
  18. " . DB_PRODUKT . " p
  19. WHERE
  20. p.katalog_id = k.katalog_id
  21. ORDER BY
  22. k.katalog_name ASC
  23. ";
  24.  
  25. $result = $db->sql_query($sql);
  26.  
  27. $katalog_list = $db->sql_fetchrowset($result);
  28.  
  29. $id_list = implode(',', $katalog_list);
  30.  
  31. $sql = "
  32. SELECT
  33. k.katalog_id,
  34. k.katalog_name,
  35. k.parent_id
  36. COUNT(p.produkt_id) AS katalog_productnum
  37. FROM
  38. " . DB_KATALOG . " k,
  39. " . DB_PRODUKT . " p
  40. WHERE
  41. p.katalog_id = k.katalog_id
  42. AND k.parent_id IN ($id_list)
  43. ORDER BY
  44. k.katalog_name ASC
  45. ";
  46.  
  47. $result = $db->sql_query($sql);
  48.  
  49. while($row = $db->sql_fetchrow($result)) {
  50. $subkatalog_list[$row['parent_id']][]['id'] = $row['katalog_id'];
  51. $subkatalog_list[$row['parent_id']][]['name'] = $row['katalog_name']; // te 3 zmienne zrobione 'na pałkę', kod i tak pisany na szybko :)
  52. $subkatalog_list[$row['parent_id']][]['pnum'] = $row['katalog_productnum'];
  53. }
  54. sql_cache('write', 'katalog_list', $katalog_list);
  55. sql_cache('write', 'subkatalog_list', $subkatalog_list);
  56.  
  57. }
  58. foreach($katalog_list as $id => $val) {
  59. ///////////////////
  60. $katalog_id = $val['katalog_id'];
  61. $katalog_name = $val['katalog_name'];
  62. $katalog_productnum = $val['katalog_productnum'];
  63.  
  64. ////////////////////// wyrzucenie do templatki
  65.  
  66. if(isset($subkatalog_list[$katalog_id])) {
  67. for($i = 0; $i < count($subkatalog_list[$katalog_id]); $i++) {
  68. $subkatalog_id = $subkatalog_list[$katalog_id][$i]['id'];
  69. $subkatalog_name = $subkatalog_list[$katalog_id][$i]['name'];
  70. $subkatalog_productnum = $subkatalog_list[$katalog_id][$i]['katalog_productnum'];
  71.  
  72. ////////////////////// wyrzucenie do templatki
  73. }
  74. }
  75. }
  76. }
  77.  
  78. ?>


Proszę się nie przejmować głupotami w stylu. tworzenie cache do subkatalogów np. przy braku katalogów, kod pisałem na szybko, aby przede wszystkim przedstawić problem, skoro i tak stoję teraz w miejscu smile.gif
Problem polega na tym, że wiem, że nie jest to dobre rozwiązanie, nie wiem nawet czy zadziała, ale liczę na Was, że mi pomożecie smile.gif
Moim celem w tej funkcji jest, aby pod koniec uzyskać pętle, na której będę mógł wypisać katalogi, w której też będę mógł zamieścić następną pętlę z subkatalogami smile.gif

Ten post edytował kam821 22.12.2009, 20:53:34
Go to the top of the page
+Quote Post
Wicepsik
post 22.12.2009, 21:05:17
Post #2





Grupa: Zarejestrowani
Postów: 1 575
Pomógł: 299
Dołączył: 26.03.2009

Ostrzeżenie: (20%)
X----


Cytat(kam821 @ 22.12.2009, 20:47:18 ) *
Problem polega na tym, że wiem, że nie jest to dobre rozwiązanie, nie wiem nawet czy zadziała, ale liczę na Was, że mi pomożecie smile.gif


Jak dajesz kod na forum to chyba warto chociaż sprawdzić czy działa.... sciana.gif


--------------------
Go to the top of the page
+Quote Post
kam821
post 22.12.2009, 21:15:08
Post #3





Grupa: Zarejestrowani
Postów: 14
Pomógł: 1
Dołączył: 24.10.2009

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


Nawet nie mam na czym, nie chce mi się tworzyć bazy, tabel i jakichś testowych katalogów, szczególnie, że piszę ten projekt od golizny, lecz wydaje mi się, że nie licząc błędów składniowych, które mogły się ewentualnie pojawić, reszta powinna być okej.

Ten post edytował kam821 22.12.2009, 21:15:25
Go to the top of the page
+Quote Post
Wicepsik
post 22.12.2009, 21:20:12
Post #4





Grupa: Zarejestrowani
Postów: 1 575
Pomógł: 299
Dołączył: 26.03.2009

Ostrzeżenie: (20%)
X----


Cytat(kam821 @ 22.12.2009, 21:15:08 ) *
Nawet nie mam na czym, nie chce mi się tworzyć bazy, tabel i jakichś testowych katalogów, szczególnie, że piszę ten projekt od golizny, lecz wydaje mi się, że nie licząc błędów składniowych, które mogły się ewentualnie pojawić, reszta powinna być okej.

To ktoś będzie poświęcał swój czas na tworzenie bazy, tabel i testowe katalogi aby sprawdzić czy to w ogóle działa?
To nie dział gotowce.


--------------------
Go to the top of the page
+Quote Post
kam821
post 22.12.2009, 21:25:10
Post #5





Grupa: Zarejestrowani
Postów: 14
Pomógł: 1
Dołączył: 24.10.2009

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


A czy gdzieś prosiłem o 'sprawdzanie, czy oby na pewno działa' ?
Proszę po prostu kogoś, kto nie ma żadnych wygórowanych oczekiwań od użytkowników, w przeciwieństwie do Twojej osoby, aby podpowiedział, co można byłoby z tym zrobić, wątpie, że przemianowanie tworzenia tablic trzeba już testować, a już na pewno nie trzeba, gdy się tylko podpowiada 'co i jak' smile.gif
Go to the top of the page
+Quote Post

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: 19.06.2025 - 12:27