Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sumowanie unikalnych rekordów - problem MySQL
Forum PHP.pl > Forum > Bazy danych
djmentos
Witam. Mam tabelę z rekordami od panelu statystyk. Poniższe zapytanie ma pobrać sumę wszystkich danych z jednego dnia, dla wszystkich stron.

  1. SELECT
  2. (SELECT COUNT(DISTINCT(stat_wizyta.wiz_ip)) FROM stat_wizyta WHERE wiz_data = '{$dataa}') AS uniq,
  3. (SELECT COUNT(stat_wizyta.id) FROM stat_wizyta WHERE wiz_data = '{$dataa}') AS odslony,
  4. (SELECT COUNT(ref_domain) FROM stat_refer WHERE ref_data = '{$dataa}') AS refy,
  5. (SELECT COUNT(kwd_data) FROM stat_keyword WHERE kwd_data = '{$dataa}') AS wyszukiwarki,
  6. (SELECT COUNT(wib_bot) FROM stat_wizbot WHERE wib_data = '{$dataa}') AS boty


Problem pojawia się w pierwszej lini.
tabel stat_wizyta ma kilka pól w tym:
wiz_ip - ip odwiedzającego
wiz_ser - id serwisu, na którym był gość.

I chodzi o to że DISTINCT sumuje rekordy z całej tabeli, nie biorąc pod uwage serwisu.

np. dla danych
stat_wizyta
wiz_ip | wiz_ser
1 | 1
2 | 1
3 | 1
1 | 2
Chciałbym otrzymać liczbę 4, co prawda IP "1" powtarza się, ale dla różnych serwisów i powinno być zliczone podwójnie, natomiast ja otrzymuję w wyniku 3.
memory
DISTINCT usuwa powtarzajace sie dane w twoim wypadku 1, Count wylicza rekordy
djmentos
a mogę jakimś innym sposobem osiągnąć interesujący mnie wynik?
kefirek
A takie coś ?
  1. SELECT
  2. COUNT(stat_wizyta.id),
  3. COUNT(stat_wizyta.wiz_ip),
  4. (SELECT COUNT(ref_domain) FROM stat_refer WHERE ref_data = '{$dataa}') AS refy,
  5. (SELECT COUNT(kwd_data) FROM stat_keyword WHERE kwd_data = '{$dataa}') AS wyszukiwarki,
  6. (SELECT COUNT(wib_bot) FROM stat_wizbot WHERE wib_data = '{$dataa}') AS boty
  7. FROM stat_wizyta WHERE wiz_data = '{$dataa}' GROUP BY stat_wizyta.wiz_ip
djmentos
ten wyświetla mi ilość odwiedzin na jednego użytkownika (jego IP)
mi bardziej chodzi o podsumowanie całego dnia. Aby rekord mi zwrócił postać:
Użytkownicy unikalni | odsłony | wejscia z wyszukiwarek | odsyłacze | roboty

wszystko działa doskonale poza unikalnymi.
mls
  1. (SELECT COUNT(stat_wizyta.wiz_ip) FROM stat_wizyta WHERE wiz_data = '{$dataa}' GROUP BY stat_wizyta.wiz_ip) AS uniq
djmentos
To co mi podałeś, wyświetla wszystkie ilość wejść dla adresu IP. I wyświetla ich wszystkie, ale przerobiłem lekko:
  1. (SELECT COUNT(DISTINCT(stat_wizyta.wiz_ip)) FROM stat_wizyta WHERE wiz_data = '2009-02-14' GROUP BY stat_wizyta.wiz_ser)


I mam wynik:
COUNT(DISTINCT(stat_wizyta.wiz_ip))
88
163
137
12
44
4

//jest to liczba unikalnych wejść dla każdego serwisu.
Teraz tyko kwestia zsumowania tego...

wiem, że na pewno funkcja SUM() ale nie wychodzi mi za bardzo z jej użyciem.
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.