Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Skrócenie kodu / zapytań sql
kam821
post
Post #1





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

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


Witam (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/smile.gif)

Ten post edytował kam821 22.12.2009, 20:53:34
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: 25.08.2025 - 02:31