Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP/MYSQL - Award Vergabe nach Tagen - kompliziert - funktioniert nicht.

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PHP/MYSQL - Award Vergabe nach Tagen - kompliziert - funktioniert nicht.

    Liebes PHP-Forum,

    ich knobel die ganze Zeit daran, was ich falsch mache.

    mit 2 Usern funktioniert es, aber mit den orginalen 20.000 Mitgliedern, hört das Script einfach irgendwann auf ohne etwas auszugeben und vorallem ohne etwas in die Datenbanktabellen "Tagaward" zu schreiben, bei 2 Usern, schreibt er auch was in die Tabelle "Tagaward".

    Kurzes zum Code, was er machen soll...

    Er Soll alle User aus der Tabelle "User" nehmen, in der Tabelle "Hits" jeden Monatstag prüfen, wieviele Hits der User gemacht hat, und dann in die Tabelle "Tagaward" schreiben, wieviele bzw welchen Award er bekommt.

    Wie gesagt, bei 2'n gehts, bei 20.000 nicht.

    Vielleicht hat jemand ne Idee.

    Liebe Grüße: Code:

    PHP-Code:
    <?php
    error_reporting
    "E_ALL" );

    include 
    'functions.php';
    include 
    'config.php';



    $user=mysql_query("SELECT * from user ORDER by id");
    $dump=0;
    $dumpn=0;
    while(
    $row=mysql_fetch_array($user)) { // User durchlaufen
        
    $a=0//Tagesangabe auf 0
        
    while ($a<=31) { // 31 Tage durchlaufen
        
    $a++; //Tag 1 usw..
        
    $tam=mysql_query("SELECT * from hits WHERE userid ='$row[alias]' AND time ='$a'");
        
    $dump=mysql_num_rows($tam); // Anzahl der generierten Hits an dem Tag
        
    if ($dumpn<$dump) { $dumpn=$dump; } // wenn 31 Tage durch, sortieren nach dem besten Tag
        
    }
        if (
    $dumpn>=1000) { mysql_query("INSERT INTO tagaward VALUES ('','$row[alias]','1000','1')"); }
        elseif (
    $dumpn>=750) { mysql_query("INSERT INTO tagaward VALUES ('','$row[alias]','750','1')"); }
        elseif (
    $dumpn>=500) { mysql_query("INSERT INTO tagaward VALUES ('','$row[alias]','500','1')"); }
        elseif (
    $dumpn>=250) { mysql_query("INSERT INTO tagaward VALUES ('','$row[alias]','250','1')"); }
        elseif (
    $dumpn>=100 ) { mysql_query("INSERT INTO tagaward VALUES ('','$row[alias]','100','1')"); }
        elseif (
    $dumpn>=50 ) { mysql_query("INSERT INTO tagaward VALUES ('','$row[alias]','50','1')"); }

    // und ja, eintragen des jeweiligen Awards    
        
        
        
    }

        

    ?>
    Also in erster Linie würde ich mich freuen wenn wir es zum laufen kriegen, gerne bin ich auch für Kritik offen und für Optimierungstipps, aber wenn es läuft, dann feier ich echt!

    Liebe Grüße,
    Benni

  • #2
    Queries in Schleifen sind nie gut für die Performance. Und du hast nicht nur eine Schleife, sondern noch zwei ineinander verschachtelt.

    Alle Datensätze auszulesen, und dann mit mysql_num_rows zu „zählen“, ist auch hochgradiger Unfug. Für sowas gibt es Aggregatfunktionen.

    Aus deiner Beschreibung geht kaum hervor, wie dein Datenmodell aussieht.
    Dass „Tage“ einfach von 1 bis 31 durchnummeriert sind, sieht schon mal merkwürdig aus.

    Kommentar

    Lädt...
    X