Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zaawansowany system reklamowy
Forum PHP.pl > Forum > PHP
Michael2318
Ponieważ ten temat umarł: http://forum.php.pl/index.php?showtopic=22...p;#entry1077833
Chciałbym go dokończyć tutaj.
Znalazłem inne rozwiązanie (tak myślę), które nie potrzebuje ani crona ani kasowania danych itd. Struktura tabeli po prostu taka:
adverts_views:
view_id | advert_id | ip | date_format

Teraz unikalny indeks na IP oraz date_format, gdzie date_format jest takiej postaci: 30-11-2013. W tym momencie do tabeli wlatują rekordy osób, które w danym dniu jeszcze nie widziały danej reklamy.

Pytanie czy to dobre rozwiązanie oraz jaki typ pola dobrać do przechowywania daty w takiej postaci. Dodam, że taką formę daty tworzy się w ten sposób:

  1. UPDATE `tabela` SET date_format = DATE_FORMAT(NOW(),'%d-%m-%Y') WHERE pole = costam;


No i jeszcze zastanawiam się czy dodatkowo wykorzystać tutaj te cookies/sesje, aby zbednie nie wywalać co odświeżenie "insert into bla bla bla" - wiadomo, że jest indeks i nic nei wejdzie do tej tabeli, jesli mialby powstać jakis dubel, ale po co zbednie co chwile walić to zapytanie?

Pozdrawiam!
SmokAnalog
W MySQL masz wbudowany typ date, który ma postać 2013-11-30. Nie musisz nic konwertować, samo now() tam się dobrze wstawi.

Twój pomysł jest dobry i prosty - ja też myślałem o takim rozwiązaniu. Miałem wątpliwości, bo taka tabela będzie bardzo szybko rosła i potem sprawdzanie tych IP i dat będzie musiało przeanalizować wiele rekordów.

Czy Twoja strona będzie miała bardzo dużo wyświetleń?
Michael2318
Taki jest ogólnie cel, to będzie coś al'a portal ogłoszeniowy, typu tablica.pl, tyle że ogłoszenia dot. konkretnej kategorii, więc jeśli pomysł wypali to może być sporo wyświetleń.
Zawsze mogę zrobić tak, że reklamy, które już osiągnęły limit ( np. ktoś wykupił 1000 wyświetleń i już tyle wyświetleń dana reklama osiągnęła) to przeniąsę te dane do tabeli typu 'archives' i jeśli user bedzie chcial sprawdzic sobie staty jego reklamy to będę je już pobierał z archiwum, dopisując przy tym, że reklama nie jest już emitowana bo osiągnęła limit.
Dodatkowo chcę zrobić tak, aby max. 5-10 reklam się wyświetlało, nie więcej i jak jedna reklama osiągnie limit to wskoczy nowa, i tak w kółko.

Cytat
Miałem wątpliwości, bo taka tabela będzie bardzo szybko rosła i potem sprawdzanie tych IP i dat będzie musiało przeanalizować wiele rekordów.


Dlatego też dodatkowo dorzuciłbym te sesje/ciastka tylko wiadomo, że to takie "zabezpieczenie" jak wcale. Coś da, ale cudów nie będzie.
SmokAnalog
Ja bym mimo wszystko zrobił inaczej. Podoba mi się pomysł na osobną tabelę z archiwum i to na niej oparłbym statystyki. Ja widzę to tak:

Do tablicy adverts_views wrzucasz WSZYSTKIE wyświetlenia. Obojętnie czy ktoś ma być zliczony czy nie.

Do tablicy adverts_views_archive wrzucasz codziennie po północy (cron) całą zawartość adverts_views, a adverts_views czyścisz. Nie musisz przy tej operacji sprawdzać żadnych dat ani nic - po prostu wychodzisz z założenia, że to, co jest w adverts_views na ten moment ma zostać przeniesione do archiwum i wszystkie blokady zostają zdjęte (bo każdy może np. mieć zliczony jeden głos na dany dzień).

W swoim panelu do statystyk, wyniki są generowane na podstawie obu tabel, żebyś miał podgląd w czasie rzeczywistym. To będzie bardzo łatwe do osiągnięcia w MySQL dzięki operatorowi UNION.

Uważam, że warto archiwizować wszystko, bo kiedyś mogą Ci się przydać do czegoś dane o nieunikalnych wyświetleniach - nigdy nie wiadomo.
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.