Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Połączenie dwóch zapytań jedno z COUNT() i drugie z LIMIT, dzielenie wyników na strony "JEDNYM ZAPYTANIEM" ...
kukix
post
Post #1





Grupa: Zarejestrowani
Postów: 600
Pomógł: 2
Dołączył: 1.09.2002
Skąd: Wrocław

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


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...?

Ten post edytował kukix 27.03.2007, 21:23:34
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
Norbas
post
Post #2





Grupa: Zarejestrowani
Postów: 100
Pomógł: 1
Dołączył: 6.02.2006

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


  1. SELECT SQL_CALC_FOUND_ROWS * FROM TABLE ORDER BY id LIMIT 1, 10

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


--------------------
Go to the top of the page
+Quote Post
kukix
post
Post #3





Grupa: Zarejestrowani
Postów: 600
Pomógł: 2
Dołączył: 1.09.2002
Skąd: Wrocław

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


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..

Ten post edytował kukix 28.03.2007, 12:36:47
Go to the top of the page
+Quote Post
Norbas
post
Post #4





Grupa: Zarejestrowani
Postów: 100
Pomógł: 1
Dołączył: 6.02.2006

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


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ń


--------------------
Go to the top of the page
+Quote Post
kukix
post
Post #5





Grupa: Zarejestrowani
Postów: 600
Pomógł: 2
Dołączył: 1.09.2002
Skąd: Wrocław

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


Dzieki za naprowadzenie na rozwiązanie.

Zamieniłem dwa zapytania na dwa inne... Powinno być szybciej... bardziej wydajnie... lepiej... Dzięki cool.gif

Ten post edytował kukix 30.03.2007, 14:12:56
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 Aktualny czas: 22.08.2025 - 11:02