Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Połączenie dwóch zapytań jedno z COUNT() i drugie z LIMIT
Forum PHP.pl > Forum > Bazy danych
kukix
Witam.

Ostatnio dostalem list od admina home.pl, że bardzo obciążam ich serwer swoimi zapytaniami do bazy...

Zaczelem opytmalizacje od skryptu dzielącego wyniki na strony..


Są tam dwa zapytania...

  1. <?php
  2. $l_odp = mysql_num_rows(sql('SELECT * FROM table ;'));
  3.  
  4. $result = sql('SELECT * FROM table ORDER BY id LIMIT 1,10;');
  5. ?>


Istnieje możliwość zastapienia tych dwóch zapytań jednym? Istnieje możliwośc jedno czesnego wybrania ilości poprzez count i wyświetlenia wyników np LIMIT 1,10 ?


Ewentualnie jak zrobić, żeby było to jak najbardziej wydajne..? zapisać w tablicy i wybrać za pomocą php potrzebne wyniki...?
Norbas
  1. SELECT SQL_CALC_FOUND_ROWS * FROM TABLE ORDER BY id LIMIT 1, 10

Jak odczytywać zwróconą liczbę wierszy przeczytaj w manualu
kukix
Cytat(Norbas @ 27.03.2007, 23:49:43 ) *
  1. SELECT SQL_CALC_FOUND_ROWS * FROM TABLE ORDER BY id LIMIT 1, 10

Jak odczytywać zwróconą liczbę wierszy przeczytaj w manualu


Dzieki.. to własnie o to chodziło... czyli ilość wierszy, która byłaby zwrócona bez wyrażenia LIMIT...


Jednak po przeczytaniu informacji na temat SQL_CALC_FOUND_ROWS w manualu pod adresem (http://dev.mysql.com/doc/refman/5.1/en/inf...-functions.html) dalej nie jestem pewien jak wybrac otrzymaną liczbę.

Znalazlem taki przykładowy kawałek:

  1. mysql> SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name -> WHERE id > 100 LIMIT 10;
  2. mysql> SELECT FOUND_ROWS();



  1. <?php
  2. $wynik = sql('SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name WHERE id > 100 LIMIT 10;');
  3. $wynik_ilosc = ('SELECT FOUND_ROWS();');
  4. ?>


Czy muszą być te dwa zapytania, żeby wybrac ilość SQL_CALC_FOUND_ROWS?

I w jaki sposób wybrać zwróconą liczbe SQL_CALC_FOUND_ROWS ..? Poprzez SQL_CALC_FOUND_ROWS AS liczba ?

Prosze o jakąś podpowiedź..


------- EDIT -----------

Już mam.. żeby odczytac wartość trzeba dodać do tego wyżej jeszcze ten kawałek.
  1. <?php
  2. $total = mysql_fetch_row($wynik_ilosc);
  3. print $total[0];
  4. ?>


Jednak, czy polepszy to wydajnośc skryptu? W sumie, to dalej są dwa zapytania..
Norbas
Cytat
Jednak, czy polepszy to wydajnośc skryptu? W sumie, to dalej są dwa zapytania..

Zgadza się, ale w pierwszym zapytaniu, które podałeś było:
  1. SELECT * FROM TABLE

i z tego zapytania odczytywałeś liczbę wierszy, mimo że wszystkie dane z tabeli w rzeczywistości nie były potrzebne, chciałeś odczytać tylko liczbę wszystkich rekordów.
Można było również zastosować zapytanie tylko o liczbę wierszy:
  1. SELECT COUNT(*) FROM TABLE

Zresztą MySQL jest zoptymalizowany do szybkiego zwracania wyników tego typu zapytań
kukix
Dzieki za naprowadzenie na rozwiązanie.

Zamieniłem dwa zapytania na dwa inne... Powinno być szybciej... bardziej wydajnie... lepiej... Dzięki cool.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.