Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][SQL] Optymalizacja
kkuba
post 29.05.2009, 11:12:06
Post #1





Grupa: Zarejestrowani
Postów: 102
Pomógł: 13
Dołączył: 6.07.2008
Skąd: Nowy Sącz

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


Witam.

Zauważyłem, że mój cms 'w spoczynku' wykonuje 13 zapytań. Ta liczba wydała mi się dość duża, więc zastanawiam się nad połączeniem co niektórych zapytań.
Mam jedną funkcję, pobierającą ogólne statystyki strony z bazy

  1. <?php
  2. function getStats()
  3.    {
  4.        $d = date('d');
  5.        $m = date('m');
  6.        $y = date('Y');
  7.        
  8.        $count = 0;
  9.    
  10.        $res = sql_query('SELECT COUNT(`id`) FROM `users`');
  11.            $res = mysql_fetch_row($res);
  12.            $stats['users'] = (isset($res[0]) && $res > 0) ? $res[0] : '0';
  13.  
  14.        $res = sql_query('SELECT COUNT(`id`) FROM `topics`');
  15.            $res = mysql_fetch_row($res);
  16.            $stats['topics'] = (isset($res[0]) && $res > 0) ? $res[0] : '0';
  17.            
  18.        $res = sql_query('SELECT COUNT(`id`) FROM `posts`');
  19.            $res = mysql_fetch_row($res);
  20.            $stats['posts'] = (isset($res[0]) && $res > 0) ? $res[0] : '0';
  21.        
  22.        $res = sql_query('SELECT `count` FROM `visits` WHERE `day`="'. $d .'" AND `month`="'. $m .'" AND `year`="'. $y .'" LIMIT 1');
  23.            $res = mysql_fetch_row($res);
  24.            $stats['vtoday'] = (isset($res[0]) && $res > 0) ? $res[0] : '0';
  25.        
  26.        $res = sql_query('SELECT `count` FROM `visits` WHERE `month`="'. $m .'" AND `year`="'. $y .'"');
  27.            while($tmp = mysql_fetch_row($res))
  28.            {
  29.                $count += $tmp[0];
  30.            }
  31.            $stats['vmonth'] = ($count > 0) ? $count : '0';
  32.            $count = 0;
  33.        
  34.        $res = sql_query('SELECT `count` FROM `visits`');
  35.            while($tmp = mysql_fetch_row($res))
  36.            {
  37.                $count += $tmp[0];
  38.            }
  39.            $stats['vall'] = ($count > 0) ? $count : '0';
  40.  
  41.        return $stats;
  42.    }
  43. ?>


Jak widać, mały nieporządek :F
I pytanko.. można te zapytania w jakiś sposób połączyć?

Z początku próbowałem UNION'ować, ale gdy jeden wynik był pusty, to pozostałe przesuwały się 'w górę'.

Pozdrawiam.
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: 14.08.2025 - 13:28