Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Unikatowe odwiedziny
Wilu88
post 23.03.2011, 18:20:39
Post #1





Grupa: Zarejestrowani
Postów: 158
Pomógł: 6
Dołączył: 7.03.2010

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


Witam mam taki problem.

Otóż chciałbym pobrać z tabeli "wejescia" liczbę ogólną kliknięć w dany banner, oraz unikalną liczbę wejść. Postanowiłem że za uniklane wejscie uznawał będe tylko jedno wejscie z danego Ip w jednym dniu.

Do tej pory mam zrobione pobieranie ogólnej liczby kliknięć:

  1. SELECT sponsor_id,sponsor_nazwa,sponsor_baner,sponsor_rozpoczecie,sponsor_zakonczenie,sponsor_aktywny,sponsor_link,COUNT(wejscie_id) FROM sponsorzy LEFT OUTER JOIN wejscia ON wejscie_sponsor=sponsor_id WHERE sponsor_aktywny=1 AND sponsor_rozpoczecie<=CURRENT_DATE AND (sponsor_zakonczenie>CURRENT_DATE OR sponsor_zakonczenie="000-00-00") GROUP BY sponsor_id


czy macie jakiś pomysł jak dorzucić do tego zapytania jeszcze pobranie unikalnych wejść?

Kolumna z numerami IP w tabeli "wejscia" nazywa się: " wejscie_ip"
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 12)
darko
post 23.03.2011, 19:30:25
Post #2





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


Tutaj:
  1. WHERE sponsor_aktywny=1 AND sponsor_rozpoczecie<=CURRENT_DATE AND (sponsor_zakonczenie>CURRENT_DATE OR sponsor_zakonczenie="00:00:00 000-00-00") GROUP BY sponsor_id

dodaj:
  1. WHERE sponsor_aktywny=1 AND wejscie_ip=$IP AND sponsor_rozpoczecie<=CURRENT_DATE AND (sponsor_zakonczenie>CURRENT_DATE OR sponsor_zakonczenie="00:00:00 000-00-00") GROUP BY sponsor_id

gdzie zmienna $IP przechowuje ip, z którego klient wchodzi na stronę

Ten post edytował darko 23.03.2011, 19:31:06


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
Wilu88
post 23.03.2011, 19:41:39
Post #3





Grupa: Zarejestrowani
Postów: 158
Pomógł: 6
Dołączył: 7.03.2010

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


Cytat(darko @ 23.03.2011, 19:30:25 ) *
Tutaj:
  1. WHERE sponsor_aktywny=1 AND sponsor_rozpoczecie<=CURRENT_DATE AND (sponsor_zakonczenie>CURRENT_DATE OR sponsor_zakonczenie="00:00:00 000-00-00") GROUP BY sponsor_id

dodaj:
  1. WHERE sponsor_aktywny=1 AND wejscie_ip=$IP AND sponsor_rozpoczecie<=CURRENT_DATE AND (sponsor_zakonczenie>CURRENT_DATE OR sponsor_zakonczenie="00:00:00 000-00-00") GROUP BY sponsor_id

gdzie zmienna $IP przechowuje ip, z którego klient wchodzi na stronę



No właśnie nie o to mi chodziło, może źle to opisałem.

To ma być zapytanie w module ze statystykami. Także muszę pobrać tym zapytaniem jednocześnie liczbę kliknięć danej reklamy czyli to zapytanie które napisałem wcześniej, oraz dołączyć do tego kliknięcia unikalne. Twój przykład podałby mi tylko wejścia unikalne jednego usera, czyli musiałbym to zapętlić i wygenerować setki zapytań biggrin.gif

Wg. mnie powinno to wyglądać mniej więcej tak: Pobrać wszystkie rekordy z tabeli wejscia, jeżeli adres IP powtarza się w danym dniu to go pominąć zostawiając tylko 1, ale jak to połączyć z poprzednim zapytaniem to nie mam pomysłu :/

Ten post edytował Wilu88 23.03.2011, 19:44:47
Go to the top of the page
+Quote Post
darko
post 23.03.2011, 19:42:32
Post #4





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


Bez struktury tabel niewiele pomożemy.


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
Wilu88
post 24.03.2011, 19:30:16
Post #5





Grupa: Zarejestrowani
Postów: 158
Pomógł: 6
Dołączył: 7.03.2010

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


Ok to wygląda to tak:

  1. --
  2. -- Struktura tabeli dla `cmslm_sponsorzy`
  3. --
  4.  
  5. CREATE TABLE IF NOT EXISTS `cmslm_sponsorzy` (
  6. `sponsor_id` int(11) NOT NULL AUTO_INCREMENT,
  7. `sponsor_nazwa` varchar(100) character SET utf8 collate utf8_polish_ci NOT NULL DEFAULT '',
  8. `sponsor_baner` varchar(40) NOT NULL DEFAULT '',
  9. `sponsor_rozpoczecie` date NOT NULL DEFAULT '0000-00-00',
  10. `sponsor_zakonczenie` date NOT NULL DEFAULT '0000-00-00',
  11. `sponsor_aktywny` tinyint(1) NOT NULL DEFAULT '0',
  12. `sponsor_link` varchar(255) NOT NULL DEFAULT '',
  13. PRIMARY KEY (`sponsor_id`)
  14. ) ENGINE=MyISAM DEFAULT CHARSET=latin2 AUTO_INCREMENT=1 ;


  1. --
  2. -- Struktura tabeli dla `cmslm_wejscia`
  3. --
  4.  
  5. CREATE TABLE IF NOT EXISTS `cmslm_wejscia` (
  6. `wejscie_id` int(11) NOT NULL AUTO_INCREMENT,
  7. `wejscie_sponsor` int(11) NOT NULL DEFAULT '0',
  8. `wejscie_data` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
  9. `wejscie_ip` varchar(30) NOT NULL DEFAULT '',
  10. PRIMARY KEY (`wejscie_id`)
  11. ) ENGINE=MyISAM DEFAULT CHARSET=latin2 AUTO_INCREMENT=1 ;



Czyli nikt nie ma pomysłu jak to rozwiązać?

W sumie można było by to zrobić drugim zapytaniem i w pętli porównać id. Tyle że to już będzie mniej wydaje przy większej ilości rekordów.
Go to the top of the page
+Quote Post
darko
post 25.03.2011, 13:50:44
Post #6





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


Hej. Jeszcze aktualne? Mógłbyś wrzucić jakieś przykładowe dane (zrzut) żeby można było popróbować na localu?


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
Wilu88
post 25.03.2011, 18:47:30
Post #7





Grupa: Zarejestrowani
Postów: 158
Pomógł: 6
Dołączył: 7.03.2010

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


  1. --
  2. -- Zrzut danych tabeli `sponsorzy`
  3. --
  4.  
  5. INSERT INTO `sponsorzy` (`sponsor_id`, `sponsor_nazwa`, `sponsor_baner`, `sponsor_rozpoczecie`, `sponsor_zakonczenie`, `sponsor_aktywny`, `sponsor_link`) VALUES
  6. (1, 'Testowe1', 'test1.jpg', '0000-00-00', '0000-00-00', 1, 'http://test1.com.pl/'),
  7. (2, 'Testowe2', 'test2.jpg', '0000-00-00', '0000-00-00', 1, 'http://test2.com.pl/');


  1. --
  2. -- Zrzut danych tabeli `wejscia`
  3. --
  4.  
  5. INSERT INTO `wejscia` (`wejscie_id`, `wejscie_sponsor`, `wejscie_data`, `wejscie_ip`) VALUES
  6. (1, 1, '2010-09-19 18:02:00','111.111.5.3'),
  7. (2, 1, '2010-09-19 18:09:00','111.111.5.3'),
  8. (3, 1, '2010-09-19 21:13:00','111.111.5.4'),
  9. (4, 1, '2010-09-20 01:49:00','111.111.5.3'),
  10. (5, 2, '2010-09-20 05:21:00','111.111.5.3'),
  11. (6, 2, '2010-09-20 07:01:00','111.111.5.3'),
  12. (7, 1, '2010-09-20 08:04:00','111.111.5.3'),
  13. (8, 1, '2010-09-20 08:06:00','111.111.5.3'),
  14. (9, 2, '2010-09-20 09:30:00','111.111.5.3'),
  15. (10, 1, '2010-09-20 11:15:00','111.111.5.3'),
  16. (11, 2, '2010-09-20 11:16:00','111.111.5.3'),
  17. (12, 2, '2010-10-28 04:30:00','111.111.5.4'),
  18. (13, 1, '2010-10-28 09:02:00','111.111.5.3'),
  19. (14, 1, '2010-10-28 16:59:00','111.111.5.3'),
  20. (15, 1, '2010-10-28 19:35:00','111.111.5.5'),
  21. (16, 1, '2010-10-28 19:38:00','111.111.5.5'),
  22. (231, 2, '2010-10-29 16:27:00','111.111.5.5'),
  23. (232, 2, '2010-10-29 21:35:00','111.111.5.3'),
  24. (233, 2, '2010-10-30 12:39:00','111.111.5.3'),
  25. (234, 1, '2010-10-30 13:53:00','111.111.5.3'),
  26. (235, 1, '2010-10-30 19:07:00','111.111.5.3'),
  27. (236, 1, '2010-10-31 09:43:00','111.111.5.3'),
  28. (237, 2, '2010-10-31 15:13:00','111.111.5.3'),
  29. (238, 1, '2010-10-31 23:42:00','111.111.5.3'),
  30. (239, 1, '2010-11-01 00:49:00','111.111.5.3');


Adresy IP z palca wpisane tylko dla testów

Ten post edytował Wilu88 25.03.2011, 18:48:38
Go to the top of the page
+Quote Post
darko
post 25.03.2011, 21:54:58
Post #8





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


Czy takie zapytanie mniej więcej oddaje to, co potrzebujesz?

  1. SELECT DISTINCT
  2. sponsor_id,sponsor_nazwa,sponsor_baner,sponsor_rozpoczecie,sponsor_zakonczenie,sponsor_aktywny,sponsor_link,COUNT(w.wejscie_id) AS cID, COUNT(w.wejscie_ip) AS cIP
  3. FROM cmslm_wejscia w, cmslm_sponsorzy s
  4. LEFT OUTER JOIN cmslm_wejscia
  5. ON wejscie_sponsor=sponsor_id
  6. WHERE
  7. DATE_SUB(CURDATE(),INTERVAL 1 DAY) <= w.wejscie_data AND
  8. s.sponsor_aktywny=1 AND
  9. s.sponsor_rozpoczecie <= CURRENT_DATE AND
  10. (s.sponsor_zakonczenie > CURRENT_DATE OR s.sponsor_zakonczenie="000-00-00")
  11. GROUP BY s.sponsor_id

Pytam, bo nie mam jak sprawdzić.

Ten post edytował darko 25.03.2011, 22:15:17


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
Wilu88
post 25.03.2011, 22:17:13
Post #9





Grupa: Zarejestrowani
Postów: 158
Pomógł: 6
Dołączył: 7.03.2010

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


Cytat(darko @ 25.03.2011, 21:54:58 ) *
Czy takie zapytanie mniej więcej oddaje to, co potrzebujesz?

  1. SELECT DISTINCT
  2. sponsor_id,sponsor_nazwa,sponsor_baner,sponsor_rozpoczecie,sponsor_zakonczenie,sponsor_aktywny,sponsor_link,COUNT(w.wejscie_id) AS cID, COUNT(w.wejscie_ip) AS cIP
  3. FROM cmslm_wejscia w, cmslm_sponsorzy s
  4. LEFT OUTER JOIN cmslm_wejscia
  5. ON wejscie_sponsor=sponsor_id
  6. WHERE
  7. DATE_SUB(CURDATE(),INTERVAL 1 DAY) <= w.wejscie_data AND
  8. s.sponsor_aktywny=1 AND
  9. s.sponsor_rozpoczecie <= CURRENT_DATE AND
  10. (s.sponsor_zakonczenie > CURRENT_DATE OR s.sponsor_zakonczenie="000-00-00")
  11. GROUP BY s.sponsor_id

Pytam, bo nie mam jak sprawdzić.


Wywala Błąd zapytania :/ Podaj jeszcze to zapytanie osobne to pobrania unikalnych zobaczymy czy zadziała

Ten post edytował Wilu88 25.03.2011, 22:17:53
Go to the top of the page
+Quote Post
darko
post 25.03.2011, 22:20:11
Post #10





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


Sprawdź tylko nazwy tabel, powinno działać. Jaki błąd wywala? To pierwsze zapytanie to było:
  1. SELECT DISTINCT count(wejscie_ip) FROM cmslm_wejscia w WHERE DATE_SUB(CURDATE(),INTERVAL 1 DAY) <= w.wejscie_data GROUP BY w.wejscie_ip

Pozmieniaj nazwy tabel na te, na których sprawdzasz i powinno być poprawne.

Ten post edytował darko 25.03.2011, 22:21:07


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
Wilu88
post 25.03.2011, 22:38:33
Post #11





Grupa: Zarejestrowani
Postów: 158
Pomógł: 6
Dołączył: 7.03.2010

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


Cytat(darko @ 25.03.2011, 22:20:11 ) *
Sprawdź tylko nazwy tabel, powinno działać. Jaki błąd wywala? To pierwsze zapytanie to było:
  1. SELECT DISTINCT count(wejscie_ip) FROM cmslm_wejscia w WHERE DATE_SUB(CURDATE(),INTERVAL 1 DAY) <= w.wejscie_data GROUP BY w.wejscie_ip

Pozmieniaj nazwy tabel na te, na których sprawdzasz i powinno być poprawne.


Ten kod kompletnie źle działał bo wyświetlał łączną liczbę wyświetleń, przerobiłem go na taki:

  1. SELECT DISTINCT count(wejscie_ip),wejscie_sponsor FROM cmslm_wejscia w WHERE DATE_SUB(CURDATE(),INTERVAL 1 DAY) <= w.wejscie_data AND w.wejscie_ip != "000.000.000.000" GROUP BY w.wejscie_sponsor


No i teraz w tablicy lądują już oddzielone odwiedzenia poszczególnych sponsorów ale nadal liczy każde kliknięcie

  1. Array ( [0] => Array ( [count(wejscie_ip)] => 1 [wejscie_sponsor] => 1 ) [1] => Array ( [count(wejscie_ip)] => 3 [wejscie_sponsor] => 2 ) )
Go to the top of the page
+Quote Post
Rid
post 25.03.2011, 22:39:04
Post #12





Grupa: Zarejestrowani
Postów: 715
Pomógł: 47
Dołączył: 5.12.2010

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


Odwzorowywanie się na podstawie Ip ,nie daje w pełni właściwego rezultatu,a co z dynamicznym ip?questionmark.gif?

Ten post edytował Rid 25.03.2011, 22:39:42
Go to the top of the page
+Quote Post
Wilu88
post 31.03.2011, 17:51:30
Post #13





Grupa: Zarejestrowani
Postów: 158
Pomógł: 6
Dołączył: 7.03.2010

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


Cytat(Rid @ 25.03.2011, 22:39:04 ) *
Odwzorowywanie się na podstawie Ip ,nie daje w pełni właściwego rezultatu,a co z dynamicznym ip?questionmark.gif?


Wiem, ale nie jest to informacja która ma być ściśle dokładna co do odwiedzającego, to ma być tylko pogląd ile osób klika w to. Przeciętny użytkownik ze zmiennym ip zmienia je raz dziennie. Także limit dzienny według mnie jest całkiem ok.

Odgrzewam temat bo jestem coraz bliżej ale brakuje mi ostatniego warunku:

Oto kod:
  1. SELECT DISTINCT count(wejscie_ip),wejscie_sponsor FROM cmslm_wejscia w WHERE DATE_SUB(CURDATE(),INTERVAL 1 DAY) <= w.wejscie_data GROUP BY w.wejscie_sponsor


A w wyniku otrzymuje:

  1. Array ( [0] => Array ( [count(wejscie_ip)] => 5 [wejscie_sponsor] => 1 ) [1] => Array ( [count(wejscie_ip)] => 2 [wejscie_sponsor] => 6 ) [2] => Array ( [count(wejscie_ip)] => 1 [wejscie_sponsor] => 22 ) )


I za każdym razem po kliknięciu w reklamę się zwiększa wartość. Z tego wnioskuje że warunek sprawdzający datę sprawdza tylko czy kliknięcia są z tego dnia i zlicza je wszystkie.

A jak zrobic żeby odrzucał powtarzające się rekordy w których IP i Data są takie same?
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 07:56