Timeout meldung

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

  • Timeout meldung

    Also funktionier tut es zwar aber ich bekomm immer eine timeout meldung und seh da eigentlich keinen fehler.

    // tabelle leer updaten
    for($i = 1; $i < 13; $i++){
    $query="UPDATE verlierer503 SET user='0', karte='0', clicks='100' WHERE id ='$i';";
    mysql_query($query);
    }


    $count = 1;
    for(;{
    if ($count <= 12) {
    // zufallszahl ermitteln
    mt_srand((double)microtime()*1000000);
    $nr = mt_rand(1,12);
    // prüfen ob schon alle 12 felder geuppt wurden wnn ja beenden
    $resulta = mysql_query("select * from verlierer503 where clicks='0'");
    $numrowsa = mysql_num_rows($resulta);
    If ($numrowsa > 11) {
    exit;
    }
    // wenn noch nicht alle felder geuppt wurden eintrag mit zufalls zahl suchen
    $result = mysql_query("select * from verlierer503 where karte='$nr'");
    $numrows = mysql_num_rows($result);
    // noch keine zahl gefunden dann eintragen
    If ($numrows < 1) {
    $query="UPDATE verlierer503 SET user='0', karte='$nr', clicks='0' WHERE id ='$count';";
    mysql_query($query);
    $count++;
    }
    }

    }

  • #2
    PHP-Code:
    // tabelle leer updaten

    // Das würde ich so machen (GOTH)
    $query="UPDATE verlierer503 SET user='0', karte='0', clicks='100' WHERE id IN (";
    for(
    $i 1$i 13$i++){
        
    $query.=( $i=="" "," )."'$i'";
    }
    $query.=")";
    mysql_query($query);



    // mt_srand() darf nur einmal aufgerufen werden (GOTH)
    mt_srand((double)microtime()*1000000);
    $count 1;
    while (
    TRUE) { // damit's im Forum dargestellt wird (GOTH)
        
    if ($count <= 12) {
            
    // zufallszahl ermitteln
            
    $nr mt_rand(1,12);
            
    // prüfen ob schon alle 12 felder geuppt wurden wnn ja beenden
            
    $resulta mysql_query("select * from verlierer503 where clicks='0'");
            
    $numrowsa mysql_num_rows($resulta);
            If (
    $numrowsa 11) exit;
            
    // wenn noch nicht alle felder geuppt wurden eintrag mit zufalls zahl suchen
            
    $result mysql_query("select * from verlierer503 where karte='$nr'");
            
    $numrows mysql_num_rows($result);
            
    // noch keine zahl gefunden dann eintragen
            
    If ($numrows 1) {
                
    $query="UPDATE verlierer503 SET user='0', karte='$nr', clicks='0' WHERE id ='$count';";
                
    mysql_query($query);    
                
    $count++;
            }
        }

    Das Verfahren ist sehr kritisch anzusehen,
    da je weniger Zahlen noch nicht gezogen wurden
    die Ermittlung unter Umständen sehr lange dauert!

    Ich würde folgendes etwas vereinfachte Verfahren vorschlagen:

    PHP-Code:
    mt_srand((double)microtime()*1000000);
    $dummy=array();
    for ( 
    $count=1$count<=12$count++ ) $dummy[$count]=0;

    for ( 
    $count=1$count<=12$count++ ) {
        while ( 
    in_array($value=mt_rand(112), $dummy) ) ;
        
    $dummy[$count]=$value;
    }

    $values="";
    foreach ( 
    $dummy AS $key=>$value ) {
        
    mysql_query("UPDATE verlierer503 SET user='0', karte='$value', clicks='0' WHERE id ='$key';");

    Die Einmalige Ermittlung von Zufallszahlen aus einem Bereich der genauso groß ist wie die Anzahl
    der zu ermittelnden Werte ist immer etwas suboptimal. Man könnte dieses leicht umgehen oder verbessern
    indem man alle Werte bis auf den letzten ermittelt und dann den noch nicht gezogenen Wert auf diesen
    setzt.

    Anyway der hier gezeigte Ansatz der Wertermittlung ohne Einbeziehung der Datenbank sollte
    auf jeden Fall schneller sein ...
    carpe noctem

    [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
    [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

    Kommentar


    • #3
      danke erst mal

      die einzelen teile bei meinem ging ja aber als ich dann alles zusammgeschmissen hatte wollte das nicht mehr so war schon ratlos deswegen.

      Das 2. beispiel von dir ist einfach super schnell , übersichtlich und kurz gehalten.

      Nochmals danke

      Kommentar

      Lädt...
      X