Seite 1 von 1

Unread Post Information to Database Mod - Schleifenproblem

Verfasst: 21.10.2003 10:40
von Ram-Brand
Hi!

Ich habe mir das Mod "Unread Post Information to Database Mod" besogrt und eingebaut. Es funktionert auch, aber ein Problem gibt es.
Die index.php vom Forum braucht sehr lange zum Laden. FAst 30sec. Das nervt natürlich gewaltig.

Ich habe jetzt herraus gefunden, das diese an einer Schleife im Mod liegt.

Jetzt meine Frage:
Gibt es eine Möglichkeit diese Schleife anderst zu programmieren um die Ladezeit zu verringern?

Code: Alles auswählen

while ($topic_read = mysql_fetch_row($result2))
        {

         if ($display_locked_too == 0)
           {
           $result4 = mysql_query("SELECT topic_id, topic_status FROM
                           " . TOPICS_TABLE . " WHERE topic_id = $topic_read[0]");
           $topic_status = mysql_fetch_row($result4);
           }

         $result3 = mysql_query("SELECT topic_id, post_id, forum_id, visit_time, user_id FROM " . TOPIC_READ_TABLE . " WHERE topic_id = $topic_read[0] AND user_id = $user_id ");
         $read = mysql_fetch_row($result3);

        if (($topic_read[3] > $read[3] || $topic_read[4] > $read[3]) &&  $topic_unread == "" && $topic_status[1] != 1)
       {
       $topic_unread = 1;
       break;
       }
     }

Danke schonmal!

Verfasst: 22.10.2003 19:48
von D@ve
Datenbankabfragen in Schleifen zu Programmieren ist ziemlich unsauberer Programmierstil. Kann aber zu dem Programm unten gerade nicht viel sagen, da ich mich weder mit den einzelnen Variablen noch mit Deinem Hack ausgekenne.

Versuch halt die beiden Queries außerhalb der Schleife unterzubringen und im. Man kommt Performance-mäßig besser weg, wenn man einmal etwas mehr aus der Datenbank liest und im Script selectiert, als x-mal nur ein paar bytes. Das gilt vor allem dann, wenn der Query in eine Schleife steht und man nicht absehen, kann wie oft diese durchlaufen wird...

Gruß, Dave

PS.: Einen Anweisungs-Block mit break zu verlassen ist auch nicht die feine englische Art (außer bei CASE-Anweisungen)...