Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zliczanie odsłon konkretnego artykuły
Forum PHP.pl > Forum > Bazy danych > MySQL
primo
Proszę o podpowiedź w sprawie następującego rozwiązania.

Mam jakiś tam artykuł trzymany w bazie danych, na stronie wyświetlana jest tylko jego zajawka. Gdy kliknie się "czytaj dalej" to dopiero otwiera się cały tekst danego artykułu. W momencie kliknięcia ma być dodawana kolejna odsłona danego artykułu. Jak proponujecie wykonać coś takiego questionmark.gif Czy wykorzystalibyście do tego baze mysql czy pliki questionmark.gif I jak powinno wyglądać zapytanie odnośnie wstawienia do bazy (jaki znacznik powinien być pobierany, aby było wiadomo co ma być dodane do bazy). Zaproponujcie jaką strukturę powinna mieć baza.

pozdrawiam
Cienki1980
Jeżeli masz artykuł przechowywany w bazie danych to dodaj do tabeli z artykułem pole 'licznik' typu INT i z każdą odsłoną zwiększaj licznik o jeden.
primo
Cytat(Cienki1980 @ 12.02.2007, 21:26:36 ) *
Jeżeli masz artykuł przechowywany w bazie danych to dodaj do tabeli z artykułem pole 'licznik' typu INT i z każdą odsłoną zwiększaj licznik o jeden.


A co jeśli chcę zliczać liczbę kliknięć nie tylko w strefie news, ale i artykuły, hasła, cytaty, biblioteczka questionmark.gif Każdy z tych działów to oddzielna tabela w bazie danych o swojej strukturze. Czy w związku z tym lepszym rozwiązaniem będzie utworzenie osobnej tabeli i trzymanie tam indeksów głównych z tych tabel questionmark.gif Co masz na myśli mówiąc: "z każdą odsłoną zwiększaj licznik o jeden" questionmark.gif Czy do znacznika <a hre> mam dodać jakiś kod ? Czy jak to ma być rozpoznawane questionmark.gif

  1. CREATE TABLE `bieg_slowniczek_licznik_klikniec` (
  2. `licznik_klikniec` INT( 11 ) NOT NULL AUTO_INCREMENT ,
  3. `ksiazka_id` INT( 11 ) NOT NULL ,
  4. `artykul_id` INT( 11 ) NOT NULL ,
  5. `cytat_id` INT( 11 ) NOT NULL ,
  6. `id_slowniczka` INT( 11 ) NOT NULL ,
  7. PRIMARY KEY ( `licznik_klikniec` )
  8. ) TYPE = MYISAM ;


Na początek mam utworzoną już tabelę. Coś sugerujecie na tym etapie questionmark.gif
frickle
Jeżeli masz jakiś kod który wyświetla cały artykuł czy inną treść, to pewnie numer tego artykułu przekazujesz w linku. Więc zmontuj sobie funkcję której paramentrem będzie numer artykułu i dodatkową tabelę w bazie gdzie przechowasz id artykuu i jego licznik. Przed kodem wyświetlającym artykuł wstawisz odwołanie do funkcji z odpowiednim paramentrem (pobranym z tablicy $_GET) a funkcja sprawdzi czy w tabeli już wystepuje ten id, jeśli tak to zmodyfikuje wpis licznika, a jeśli nie to doda rekord z licznikiem równym 1 i po kłopocie.

Jeżeli natomiast chesz zliczać różne treści (artykuły, newsy itd) to wypada albo zrobić funkcję i tabelę dla każdego rodzaju, albo do tabeli dodać pole rodzaj a w funkcji dodatkowy parametr określający rodzaj. Tyle że wtedy w linku musisz przekazywać rodzaj wpisu. A poza tym to już tylko modyfikacja zapytań w funkcji i również z głowy.

  1. CREATE TABLE liczniki (
  2. id_licznika INT(11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
  3. id_zasobu INT(11) NOT NULL,
  4. rodzaj TINYINT NOT NULL DEFAULT = 0,
  5. licznik INT(11) DEFAULT 1);


  1. <?php
  2. function koryguj_licznik($idzasobu, $rodzajzasobu)
  3.  {
  4. //... łączenie z bazą ...
  5. $query = 'select * from liczniki where id_zasobu = '.$_GET['id'].' and rodzaj = .'$_GET['rodzaj'];
  6. $wynik = mysql_query($query);
  7. $ile = mysql_num_rows($wynik);
  8. if($ile > 0)
  9.  {
  10. $licznik = mysql_fetch_assoc($wynik);
  11. $zliczone = $licznik['licznik'];
  12. $zliczone++;
  13. $query = 'update liczniki set licznik = '.$zliczone.' where id_zasobu = '.$_GET['id'].' and rodzaj = .'$_GET['rodzaj'];
  14. mysql_query($query);
  15.  }
  16. else
  17.  {
  18. $query = "insert into liczniki (idzasobu, rodzaj) values (".$_GET['id'].",".$_GET['rodzaj'].")";
  19.  }
  20.  }
  21. ?>

Pisane z palca więc nie wiem czy zadziała, ale powinno.
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.