Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: poszukiwana idea na przechowywanie danych konfiguracyjnych i statystyk w bazie
Forum PHP.pl > Forum > PHP
ChrisB
witam

muszę zreorganizować trochę serwis i teraz mam takie wątpliwości:
problem 1)
różnego rodzaju dane odnoszące się do kont użytkowników typu BOOL, liczbowych, - mam takich kolumn w bazie około 20-25 aktualnie i dodawanie kolejnych zaczyna być poprostu koszmarem, raczej nie potrzebuję wyszukiwać użytkowników pod kątem tych pól więc pytanie brzmi:
czy dalej pchać się w taki system (jedna zmienna konfiguracyjna - jedna kolumna) czy może lepiej zrobić to na flagach i władować do jednej kolumny? albo jest inny lepszy jeszcze sposób?
problem 2) jest podobny - ale dotyczy statystyk serwisu typu - ile postów na forum, ile tematów, ile osób online i dziesiątki innych
aktualnie zrobiłem sobie osobną tabelkę z 2-ma polami - indexem (przechowującym nazwę zmiennej) oraz value (z jej wartością), zastanawiam się na ile to jest optymalne i czy nie można tego lepiej zrobić - na przykład władować wszystko do jednego pola i potem implode/explode plus używając define - ustawić odpowiednie indexy

wszelakie pomysły mile widziane:D
pozdrawiam
Crozin
Preferencje:
1) Tabela Preferencja: id, nazwa (varchar), typ(enum: string,boolean,integer,double itp.)
2) Tabela użytkowników
3) Tabela łącząca: id_pref, id_member, value (text)

Takie preferencje dla danego użytkownika możesz sobie cache-ować (chociażby bezpośrednio w tabeli użytkowników)

Te statystyki podobnie:
1) Tabela statistics: key, value
ChrisB
hmm nie do końca jestem przekonany o słuszności tego rozwiązania ;/
co do statystyk - mam tak teraz, ale jakoś nie podoba mi się takie rozrzucenie, plus nie mam do końca pomysłu jakbym miał z tego jakies zestawienie dzienne/miesieczne robic
light_neon
witam
1) Robisz osobną tablę "users", w której trzymasz dane użytkowników, a w osobnej tabeli "preferences" masz kolumny z poszczególnymi preferencjami i kolumnę "user" w której przypisujesz preferencje do usera.

2) Do statystyk typu: "ile jest wszystkich postów/userów/tematów/itp" nie potrzeba osobnej tabeli tylko zliczasz je odpowiednim zapytaniem. Tak samo możesz zliczac ile postów danego dnia zostało napisach ile wątków ile osób się zarejestrowało, jeśli masz do każdego postu/usera/itp przypisaną datę utworzenia. Więc chyba w tym przypadku szkoda tracić miejsce na kolejną tabelę, skoro dane można prosto wygenerować.
Żeby zliczyć ile jest osób on-line np po IP:
tworzysz tabele "online" -> pobierasz IP usera -> jeśli jest już na liście - aktualizujesz datę jego aktywności -> jeśli nie dopisujesz jego IP i datę i sprawdzasz tabelę w poszukiwaniu userów, którzy mają datę aktywności starszą niż np 3 minuty i albo ustawiasz im wartość np "activ" na 0 (dzięki temu będziesz mógł później zliczać statystyki dla konkretnych dat), albo usuwasz go z tabeli. Jeśli np chcesz znać czas pobytu na stronie, to przy dodaniu nowego zapamiętujesz czas, a podczas ustawiania "active" na 0 zapisujesz czas zakończenia aktywności.
Nie da się dokładnie określić momentu kiedy użytkownik opuścił stronę, więc musisz przyjąć jakiś czas braku aktywności, po którym uznajesz ze użytkownik opuścił stronę, ale może być tak, że użytkownik np czyta długi artykuł i cały czas jest na stronie ale po 3 minutach zostanie oznaczony jako nieaktywny. Jeżeli chcesz uniknąć takich sytuacji najlepiej dodać javascripta, który co 2,5min aktualizuje datę aktywności usera bez przeładowywania strony.
ChrisB
to tak dokladnie mam teraz - tylko ze nie mam osobno users/preferences - tylko jedna jest to tabelka z okolo 40 kolumnami. nie musze chyba pisac jak delikatnie rzecz ujmując jakakolwiek praca na niej jest uciązliwa
co do statystyk - bedą one dostepne dla kazdego wiec pozwalanie grzebac 50+ zapytan po większosci tabelek jest lekko rzecz ujmując nie na miejscu - mam przygotowane skrypty ktore tworzą aktualnie pary "statystyka"->"wartosc" (plus np ->zwieksz licznik przy nowym poscie)
ale dalej nie podoba mi sie to - bo wybieranie i wyswietlanie tych danych jest męczące - potrzebuje jakąś bardziej uniwersalną metodę, i tak jak pisałem skłaniam się w kierunku czegoś takiego:

  1. define ('S_F_POSTOW',1);
  2. define ('S_F_TEMATOW',2);
  3. define ('S_O_ONLINE',3);
  4. define ('S_O_DZIEN',4);
  5. define ('S_O_TYDZIEN',5);
  6. define ('S_O_MIESIAC',6);
  7. ...
  8.  
  9. po czym:
  10. mysql_query(SELECT wartosc FROM statystyki WHERE date=dzisiaj)

explode na wyniku i pobieraie potrzebnych wartosci już w skrypcie wyswietlającym te dane - tym sposobem byłby pobierany 1 rekord z tabelki z jednym rekordem dla każdego dnia (co by pozwoliło generować statystki przyrostowe, a także przechowywać historię)

zmiana odbywała by się w taki sposób:
  1. mysql_query('select wartosc from statystyki where date=dzisiaj')
  2. $tabstatysk=explode($wynik_z_zapytania);
  3. //dla np zwiekszenia licznika postów przy dodaniu na forum:
  4. $tabstatystyk[S_F_POSTOW]++;
  5. mysql_query('update statystyki set wartosc='.implode($tabstatystkyki).' where date=dzisiaj')


ma coś takiego sens ?
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.