Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL]Problem z połączeniem 4 tabel + COUNT
Forum PHP.pl > Forum > Przedszkole
drmarian
Witajcie, mam następujący problem

Mam tabelę petenci z polami imie,nazwisko, id
mam 3 tabele odpowiednio spotkania_g1,spotkania_g2 i spotkania_g3 z taka sama struktura, id, id_petenta, satus

chcę zliczyć spotkania dla poszczególnych petentów, gdzie status w spotkaniach jest "odbyte+jakiś tekst"
Mam takie zapytanie:

  1. SELECT petenci.nazwisko, petenci.imie, petenci.id, count(spotkania_g1.STATUS),count(spotkania_g2.STATUS),count(spotkania_g3.STATUS)
  2. FROM `petenci`
  3. LEFT JOIN spotkania_g1 ON spotkania_g1.id_petenta = petenci.id
  4. LEFT JOIN spotkania_g2 ON spotkania_g2.id_petenta = petenci.id
  5. LEFT JOIN spotkania_g3 ON spotkania_g3.id_petenta = petenci.id
  6.  
  7. WHERE spotkania_g1.STATUS LIKE 'obecno%' OR spotkania_g2.STATUS LIKE 'obecno%' OR spotkania_g3.STATUS LIKE 'obecno%'
  8.  
  9. GROUP BY petenci.nazwisko


Problem jest taki, że przy COUNT wychodzi mi jakaś kosmiczna liczba (jeżeli ten sam petent ma dane w g1 i g2 rekordy)
Jakieś pomysły? co robię źle?
Będę wdzięczny za pomoc
nospor
Jestes moze na etapie, ze mozesz zmienic te baze? Bo na chwile obecną to jakieś nieporozumienie.

Status to status, powinien byc sam status a nie jeszcze jakis tekst.
I czemu w ogole masz 3 takie same tabele spotkania_g1,spotkania_g2 i spotkania_g3 questionmark.gif Tak sie nie robi takich rzeczy
drmarian
Cytat(nospor @ 21.08.2014, 16:36:49 ) *
Jestes moze na etapie, ze mozesz zmienic te baze? Bo na chwile obecną to jakieś nieporozumienie.

Status to status, powinien byc sam status a nie jeszcze jakis tekst.
I czemu w ogole masz 3 takie same tabele spotkania_g1,spotkania_g2 i spotkania_g3 questionmark.gif Tak sie nie robi takich rzeczy


Ta baza już jest i nic nie mogę zmienić. Muszę po prostu zrobić odpowiedni raport.
Generalnie muszę wyfiltrować ze statusu (policzyć) "obecnosc_rozpoczecie" i "obecnosc_kontynuacja", zrobiłem LIKE. Pewnie sugerujesz, że jednak OR zrobić - optymalizacja, spoko, rozumiem.
Mnie bardziej chodzi o strukturę całego zapytania - żeby mi to dobrze zliczało.
CuteOne
  1. SELECT
  2. petenci.nazwisko,
  3. petenci.imie,
  4. petenci.id,
  5. (SELECT count(*) FROM spotkania_g1 WHERE spotkania_g1.id_petenta = petenci.id AND spotkania_g1.STATUS LIKE 'obecno%') AS cnt1,
  6. (SELECT count(*) FROM spotkania_g2 WHERE spotkania_g2.id_petenta = petenci.id AND spotkania_g2.STATUS LIKE 'obecno%') AS cnt2,
  7. (SELECT count(*) FROM spotkania_g3 WHERE spotkania_g3.id_petenta = petenci.id AND spotkania_g3.STATUS LIKE 'obecno%') AS cnt3
  8. FROM `petenci`


Powiedz szefowi, że ta baza jest naprawdę słaba, i przydała by się porządna modernizacja
nospor
Cytat
Pewnie sugerujesz, że jednak OR zrobić - optymalizacja, spoko, rozumiem
Nie, sugeruje ze struktura tej bazy jest o kant 4 liter smile.gif
No ale skoro to nie Twoja sprawka i nie mozesz juz tego poprawic to trudno
drmarian
Cytat(CuteOne @ 21.08.2014, 17:06:36 ) *
Powiedz szefowi, że ta baza jest naprawdę słaba, i przydała by się porządna modernizacja




Baardzo dziękuję
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.