ich habe vor kurzer Zeit meinen Provider gewechselt und seitdem läuft das Portal nicht mehr schnell, weil eine Abfrage für die aktuellsten 5 Threads aus dem Forum das ganze ausbremst. Nun würde ich gerne wissen, wo der Fehler liegen kann, wenn es beim alten Provider ganz normal geklappt hat. Ohne die Abfrage der neusten Threads läuft das Portal (noch in der bauphase) ganz normal schnell.
Hier ist der Code für die Abfrage. Vielleicht hilft es ja. Das Forum ist auf dem neusten Stand.
Code: Alles auswählen
<?PHP
//forum.php
$limit=5; // Maximal angezeigte Anzahl der Threads
$count=1; // hier wird losgezählt
$topic_id=1; // der erste Thread fällt mal zum raus, um die Variable zu haben
$array=array();
$array_var="topic_id not like 1";
// DB Connect
[gelöscht]
// Aktuelle Posts holen
#$get_posts=mysql_query("SELECT post_id, topic_id, forum_id, poster_id, FROM_UNIXTIME( (post_time), '%d.%m.%Y - %H:%i' ) AS datum FROM `phpbb_posts` ORDER BY post_id DESC LIMIT 1 " );
// Spezifikation der Einträge
while($count<=$limit){
if($topic){
$topic_id=$topic;
$array[$count]=$topic;
$array_var=$array_var." and topic_id not like ".$array[$count];
}
// Aktuelle Posts holen
$get_posts=mysql_query("SELECT post_id, topic_id, forum_id, poster_id, FROM_UNIXTIME( (post_time), '%d.%m.%Y - %H:%i' ) AS datum FROM `phpbb_posts` where $array_var ORDER BY post_id DESC LIMIT 1 " );
while($row = mysql_fetch_object($get_posts)){
$poster = $row->poster_id;
$forum = $row->forum_id;
$topic = $row->topic_id;
$linkid = $row->post_id;
$datum = $row->datum;
// Abfrage des Poster-Name
$get_poster=mysql_query("SELECT username FROM `phpbb_users` WHERE user_id = $poster ");
$row1 = mysql_fetch_object($get_poster);
$poster_name=$row1->username;
// Abfrage des Foren-Name
$get_forum=mysql_query("SELECT forum_name, cat_id FROM `phpbb_forums` WHERE forum_id = $forum");
$row2 = mysql_fetch_object($get_forum);
$forum_name=$row2->forum_name;
$cat_id=$row2->cat_id;
// Abfrage der Kategorie (Hauptstudium/Grundstudium...)
$get_cat=mysql_query("SELECT cat_title FROM `phpbb_categories` WHERE cat_id = $cat_id");
$row5 = mysql_fetch_object($get_cat);
$cat_name=$row5->cat_title;
// Abfrage des Thread-Name
$get_thread=mysql_query("SELECT topic_title FROM `phpbb_topics` WHERE topic_id = $topic");
$row3 = mysql_fetch_object($get_thread);
$Titelvar=$row3->topic_title;
// Abfrage der Antworten für den jeweiligen Thread
$get_answer=mysql_query("SELECT topic_replies FROM `phpbb_topics` WHERE topic_id = $topic");
$row4 = mysql_fetch_object($get_answer);
$Answervar=$row4->topic_replies;
// Abfrage, ob Beitrag von "Heute" ist...
$zwischenspeicher1 = $row->datum;
$zwischenspeicher2 = substr($zwischenspeicher1, 0, -8);
$heute = date("d.m.Y");
if ($heute == $zwischenspeicher2){
$zwischenspeicher3 = substr($zwischenspeicher1, 10);
$datum = "<i><b>heute</b></i>".$zwischenspeicher3;
}
// Abfrage der Anzahl der Einträge des aktuellen Datums
$get_number=mysql_query("SELECT COUNT(post_id) AS anzahl, CURDATE() AS today FROM phpbb_posts WHERE FROM_UNIXTIME(post_time, '%Y-%m-%d') = CURDATE() GROUP BY FROM_UNIXTIME(post_time, '%Y-%m-%d') " );
$number = "Null";
while($zeile = mysql_fetch_object($get_number)){
$number = $zeile->anzahl;
} // aktuell
// Abfrage der Anzahl der Einträge des Vortages
$tstamp = mktime(0, 0, 0, date("m"), date("d")-1, date("Y"));
$gestern = date("Y-m-d", $tstamp); // ISO-8601 Format
$get_number_y=mysql_query("SELECT COUNT( post_id ) AS anzahl, CURDATE( ) AS today FROM phpbb_posts WHERE FROM_UNIXTIME( post_time, '%Y-%m-%d' ) = '$gestern'" );
$number_y = "Null";
while($zeile1 = mysql_fetch_object($get_number_y)){
$number_y = $zeile1->anzahl;
} // Vortag
if (strlen($Titelvar) > 45)
$Titelvar = substr($Titelvar, 0, 45)."...";
// Ausgabe in html
echo "<div id=\"start_last_entries\"><a href=\"http://www.campuszentrale.de/uni-kiel/forum/viewtopic.php?p=".$linkid."#".$linkid."\" class=\"special_link\">".$Titelvar."</a><br>
Forum: <a href=\"http://www.campuszentrale.de/uni-kiel/forum/viewforum.php?f=".$forum."\">[".$forum_name."] </a><br>Kategorie: <b>".$cat_name."</b><br>
am: ".$datum." von: ".$poster_name." || AW: ".$Answervar."<div id=\"linie\"></div>
</div>";
}
$count++;
}// while(count)
echo "<div id=\"anzahl_beitraege\">";
echo "Beiträge <i><b>heute:</b></i>    ".$number."";
echo "<br>Beiträge <i><b>gestern:</b></i> ".$number_y."";
echo "</div>";
//für das Auswahlformular
$morgen=mktime(0, 0, 0, date(m), date(d)+1, date(y));
$heute=mktime(0, 0, 0, date(m), date(d), date(y));
$gestern=mktime(0, 0, 0, date(m), date(d)-1, date(y));
$vorgestern=mktime(0, 0, 0, date(m), date(d)-2, date(y));
$pruefvar = "nein";
?>
<div id="alle_beitraege">
<form action="index.php?section=forum_dropdown" method="post">
<select class="dropdown_entry" name="url" onchange="this.form.submit()" >
<option class="dropdown_entry" value="<? echo $heute ?>" selected>Alle Einträge anzeigen von:</option>
<option class="dropdown_entry" value="<? echo $heute ?>">Heute</option>
<option class="dropdown_entry" value="<? echo $gestern ?>">Gestern</option>
<option class="dropdown_entry" value="<? echo $vorgestern ?>">Vorgestern</option>
<option class="dropdown_entry" value="<? echo "noanswer"; ?>">UNBEANTWORTETE</option>
</select>
</form>
</div>
Gruß
Alex