Ergebnis 1 bis 2 von 2

Thema: CatalogHitCounter 80MB Datenbank zuviel

  1. #1
    Contao-Fan Avatar von izanagi
    Registriert seit
    19.01.2011.
    Ort
    Köln
    Beiträge
    595

    Standard CatalogHitCounter 80MB Datenbank zuviel

    Halli hallo,
    der Hitcounter hat derzeit über ne halbe Millionen Einträge in der Datenabnk
    Daher ist sie nun 85 MB groß.
    Meine Frage, hat jemand ein Script, ein Tool, das die Einträge alle 30 Tage oder eben manuell
    schrumpft und zusammenfasst zu einer Gesamtzahl an Hits ?

    Ich denke mal das man nach 30 Tagen die IPs wieder freigeben kann und die Datenbank entlassten sollte.
    Würde dann die Eintrage addieren und jeweils die Punktezahl dem CatalogItem zuschreiben und anschließen das ganze sübern.

    Oder habt ihr andere Tipps ?
    Erweiterungen [district_settings] [district_cloud3d] [district_rating]
    Design,Web,Videos und Games - mediadistrict.de

  2. #2
    Contao-Fan Avatar von izanagi
    Registriert seit
    19.01.2011.
    Ort
    Köln
    Beiträge
    595

    Standard

    Habe selber etwas gebaut. Den Button dazu habe ich im BackEnd eingebaut, den kann man sich natürlich auch
    in einer Cron Job Routine einbauen.

    TEIL 1 - Zusatzspalte für catalogitemhitsfield

    system/modules/catalogitemhitsfield/config/database.sql
    PHP-Code:
    CREATE TABLE `tl_catalog_hitcounter` (
    -- 
    id for this entry
      
    `idint(10unsigned NOT NULL auto_increment,
    -- 
    id of the catalog
      
    `cat_idint(10unsigned NOT NULL default '0',
    -- 
    id of the item in the catalog 
      
    `item_idint(10unsigned NOT NULL default '0',
    -- 
    ip where this hit originated from
      
    `ipvarchar(255NOT NULL default '',
    -- 
    time when this hit occured
      
    `timeint(10unsigned NOT NULL default '0',
    -- 
    all hits
      
    `cacheint(10unsigned NOT NULL default '0',
      
    PRIMARY KEY  (`id`)
    TYPE=MyISAM


    TEIL 2 - Button einbauen (BackEnd)

    PHP-Code:
    <form id="reinigung" class="tl_form" method="post" action="<? PHP_SELF ?>">
        <input type="hidden" value="reinigung" name="FORM_SUBMIT">
        <input type="hidden" name="REQUEST_TOKEN" value="<?php echo REQUEST_TOKEN?>" />
        <input name="reinigung" type="hidden" value="1" />
            <table style="border-bottom: 3px dotted #AAAAAA;">
            <tr>
            <td style="width:70%;background:#eeeeee;">Datenbank reinigen</td>
            <td ><input name="klick" type="submit" value="ausführen" /></td>
            </tr>
            </table>
    </form>

    TEIL 3 - PHPcode zur Ausführung

    PHP-Code:
    <?php
    if ($this->Input->post('FORM_SUBMIT') == 'reinigung'){
        if(
    $this->Input->post('reinigung') == ){
            
    $this->import('Database');
            
    $date = new DateTime();
            
    $date $date->getTimestamp();
            
    $archivzeit $date 2592000// heute minus 30 tage,dann wird archiviert
            
    $objCat $this->Database->prepare("SELECT id FROM tl_catalog_types")->execute();
            
            while (
    $objCat->next()){
                
    $nextcat $objCat->id;
                
                
    $objNext $this->Database->prepare("SELECT item_id, COUNT(*) as anzahl FROM tl_catalog_hitcounter WHERE cat_id=? AND cache=? AND time<? GROUP BY item_id")->execute($nextcat,'',$archivzeit);
                
    $this->Database->prepare("DELETE FROM tl_catalog_hitcounter WHERE cat_id=? AND cache=? AND time<? ")->execute($nextcat,'',$archivzeit);//alle archivierten löschen

                
    while ($objNext->next()){

                    
    $objExist $this->Database->prepare("SELECT id, cache FROM tl_catalog_hitcounter WHERE item_id=? AND cache!=? " )->limit(1)->execute($objNext->item_id,'');
                    if(
    $objExist->numRows){// Eintrag mit Cache wenn er existiert
                        
    $neuwert $objExist->cache $objNext->anzahl;
                        
    $this->Database->prepare("UPDATE tl_catalog_hitcounter SET cache = ? AND time = ? WHERE id = ? ")->execute($neuwert,$date$objExist->id);
                    }else{
    //sonst neuen erstellen
                        
    $arrNewData['id'] = 0;
                        
    $arrNewData['cat_id'] = $nextcat;
                        
    $arrNewData['item_id'] = $objNext->item_id;
                        
    $arrNewData['ip'] = '';
                        
    $arrNewData['time'] = $date;
                        
    $arrNewData['cache'] = $objNext->anzahl;
                        
    $this->Database->prepare("INSERT INTO tl_catalog_hitcounter %s")->set($arrNewData)->execute();
                    }
                }
            }
        }
    }
    ?>

    TEIL 4 - Counter anpassen für die Ausgabe

    OH GOTT, ja super... alles umsonst ich seh gerade das die Hitcounter Einträge nur obligatorisch wegen der IP verifizierung existieren. Die werden ja schon im Catalog Item selbst gespeichert
    grrrrrrrrr
    Egal, den Code brauch ich trotzdem für andere Rating Module ^^
    Geändert von izanagi (29.06.2013 um 16:55 Uhr)
    Erweiterungen [district_settings] [district_cloud3d] [district_rating]
    Design,Web,Videos und Games - mediadistrict.de

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •