Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Czy zapytanie jest optymalne?, Obliczenie ilości rekordów z dwóch niezależnych tabel w jednym zap.
kodereq
post
Post #1





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 27.02.2009

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


Czy zapytanie w tej formie jest optymalne ?

  1. SELECT count(table1.id) AS liczebnosc_pierwszej_tabeli, count(table2.id) AS liczebnosc_pierwszej_tabeli
  2. FROM `table1`, `table2`


Widać chyba wyraźnie, że zastępuje ono 2 kolejne zapytania, tylko czy czasami nie kwadraci się?

Tak BTW: lepiej pisać count(*) czy np. count(id) oraz czemu count(table1.*) nie działa ?

Ten post edytował kodereq 11.07.2009, 13:41:34
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
erix
post
Post #2





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Widać chyba wyraźnie, że zastępuje ono 2 kolejne zapytania, tylko czy czasami nie kwadraci się?

Jak żyje, jeszcze nie słyszałem o takim czasowniku, Słownik Języka Polskiego też nie słyszał.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
kodereq
post
Post #3





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 27.02.2009

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


"Kwadraci" - jego złożoność staje się kwadratowa. Załóżmy, że przeszukujemy tablicę w czasie liniowym, ale przez pomyłkę podczas jednej iteracji wykonujemy dodatkowo podobną ilość operacji jak długość tablicy. To właśnie przykład przykład "kwadracenia się" przeszukiwania tablicy (jest denny, ale inne z nich to temat raczej na pracę magisterską, a nie na forum).
Go to the top of the page
+Quote Post
ActivePlayer
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 224
Pomógł: 40
Dołączył: 6.07.2004
Skąd: Wuppertal

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


a czy z użyciem union nie będzie szybciej?
Go to the top of the page
+Quote Post
kodereq
post
Post #5





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 27.02.2009

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


A jak jak byś to skutecznie zrobił za pomocą UNION? Próbowałem, ale dostawałem dziwne wyniki.

  1. SELECT count(*) AS 'liczebnosc_pierwszej_tabeli'
  2. FROM `table1` UNION ALL
  3. SELECT count(*) AS 'liczebnosc_drugiej_tabeli'
  4. FROM `table2`


Napisałem coś takiego, jednak bardzo brzydko prezentuje mi wyniki - w jednej kolumnie, pod sobą. Przydałby się jakiś pewniejszy sposób - w dużym projekcie za takie niedociągnięcie można zapłacić wydłużeniem czasu jego wykonania.

Ten post edytował kodereq 11.07.2009, 19:19:58
Go to the top of the page
+Quote Post
maly_swd
post
Post #6





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

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


opisz dokladnie co chcesz uzyskac i podaj jakies przykladowe dane z tabel i jakie maja wyjsc wyniki... bo z 1 przykladu to chyba nie bardzo wyjdzie to co chcesz:)

z union mozna dac jeszcze na calosc select sum+ grupowanie i bedziesz mial 1 wynik

  1. SELECT sum(a) FROM ((SELECT count(*) AS a FROM tab1) UNION ALL
  2. (SELECT count(*) AS a FROM tab2)) AS b
  3.  
  4. GROUP BY a


wiem ze to chyba nie jest optymalne:)

Ten post edytował maly_swd 11.07.2009, 19:55:23


--------------------
śmieszne obrazki
Kryzys: Ser jem spleśniały, wino piję stare i samochód mam bez dachu..
Go to the top of the page
+Quote Post
kodereq
post
Post #7





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 27.02.2009

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


Potrzebuję tylko ilość rekordów z tych dwóch tabel.
Go to the top of the page
+Quote Post
maly_swd
post
Post #8





Grupa: Zarejestrowani
Postów: 744
Pomógł: 118
Dołączył: 14.02.2009
Skąd: poziome

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


to co Ci podalem zlicza ilosc kolum w 2 tabelach:)


--------------------
śmieszne obrazki
Kryzys: Ser jem spleśniały, wino piję stare i samochód mam bez dachu..
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: 20.08.2025 - 00:03