Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Skrócenie kodu / zapytań sql
Forum PHP.pl > Forum > PHP
kam821
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
Wicepsik
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
kam821
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.
Wicepsik
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.
kam821
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
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.