Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zliczanie wystąpień rekordu w tabelach
zoltodziob
post
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 9.05.2015

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


Witajcie.
Postanowiłem założyć konto na Forum. Od kilku miesięcy korzystałem z jego pomocy, głównie przeszukując archiwalne tematy, jednak dzisiaj potrzebuję Waszej pomocy.
Mam do wykonania takie zapytanie MYSQL: muszę sprawdzić czy podany rekord id_klienta o wartości dajmy na to 10 w tabeli KLIENCI został użyty w innych tabelach. Zapytanie miało by zwraca łączną liczbę wystąpień we wszystkich tabelach (np. w 6 podanych tabelach). Próbowałem za pomocą JOIN ale strasznie skomplikowane przy wielu tabelach. Czytałem też o HAVING, ale trochę tego nie ogarniam. Dodam też pracuję przy pomocy Codeigniter. Macie jakiś pomysł? (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
DarkAbso
post
Post #2





Grupa: Zarejestrowani
Postów: 60
Pomógł: 10
Dołączył: 17.11.2011

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


Nie do końca i już wytłumaczę dlaczego (chociaż mogę się mylić ). Najpierw budujesz widok tabeli klienci połączonej z innymi (costam1 itd...), a następnie dopiero ograniczasz where (czyli kleimy wszystko a później dopiero wycinamy). Najlepiej było by od razu ograniczyć do rekordów które potrzebujemy. W tym wyniku takie zapytanie zagnieżdżone będzie szybsze:
  1. SELECT COUNT(klient_id) FROM
  2. (SELECT klient_id FROM tabela1 WHERE klient_id = 1
  3. UNION ALL
  4. SELECT klient_id FROM tabela2 WHERE klient_id = 1
  5. UNION ALL
  6. SELECT klient_id FROM tabela3 WHERE klient_id = 1) AS test

Do tego użyte jest jedno wywołanie funkcji count i brak dodawania co też wpływa na tempo zapytania.

W Twoim zapytaniu można kombinować z ograniczeniami od razu przy join'ach co by przyśpieszyło zapytanie.

Zresztą z ciekawości wykonałem test i go powtórzyłem kilka razy. Co prawda na małej ilości danycm ale moje zapytanie wykonuje się 0 ms, a Twoje 1 ms. Z ciekawości jutro sprawdzę na większej ilości danych. (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Posty w temacie
- zoltodziob   Zliczanie wystąpień rekordu w tabelach   9.05.2015, 18:41:06
- - mmmmmmm   Funkcje agregujące (Count) przyjacielem twym. Łącz...   10.05.2015, 00:08:56
- - zoltodziob   Nie wiem czy dobrze rozumiem, ale poniższy kod na ...   10.05.2015, 10:20:36
- - lukasz1985   Zlicz z każdej tabeli osobno i zsumuj [PHP] pobie...   10.05.2015, 11:18:21
- - zoltodziob   Takiego rozwiązania chciałem uniknąć. Chciałem to ...   10.05.2015, 13:45:02
- - viking   Od tego jest sam silnik BD. Innodb oraz ON DELETE ...   10.05.2015, 14:12:58
|- - DarkAbso   Cytat(viking @ 10.05.2015, 15:12:58 )...   11.05.2015, 12:25:37
- - mmmmmmm   Omatkoboska... NOT IN bez warunku na NULL? http://...   11.05.2015, 14:08:37
|- - DarkAbso   Cytat(mmmmmmm @ 11.05.2015, 15:08:37 ...   11.05.2015, 14:37:51
- - zoltodziob   Zgadza się id_klient nie może przyjmować wartości ...   12.05.2015, 19:29:57
- - salfunglandyare   on delete restrict lub no action spowoduje, że pod...   12.05.2015, 20:43:01
- - zoltodziob   Zrobię chyba tak jak zaproponował salfunglandyare....   12.05.2015, 20:50:40
- - DarkAbso   Zapytanie z left join'ami prawdopodobnie będzi...   12.05.2015, 22:04:55
- - salfunglandyare   Cóż, jestem pewny, że szybciej niż subqueries ale...   12.05.2015, 22:11:22
- - DarkAbso   Nie do końca i już wytłumaczę dlaczego (chociaż mo...   12.05.2015, 23:34:56
- - salfunglandyare   masz rację, ale ja pisałem o subquerries w sensie ...   12.05.2015, 23:46:50
- - DarkAbso   Jak już pisałem, temat woda. Jest kilka rozwiązań,...   13.05.2015, 00:08:59


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: 11.10.2025 - 04:26