ERLEDIGT
NEIN
NEIN
ANTWORTEN
4
4
ZUGRIFFE
456
456
EMPFEHLEN
-
Hallo,
ich habe extra den allgemeinen Thread-Titel gewählt, weil ich mehrere Fragen habe.
Also, ich bin dabei ein Forum zu bauen und habe bisher auch alles vorerst notwendige.
Jedenfalls habe ich ganz am Anfang so eine ähnliche Übersicht wie hier im Forum. Ein Beispiel:
[Allgemein] (10 Foren, 4 Threads, 19 Beiträge)
- Support
- Neuigkeiten
[Programmierung] (x Foren, y Threads, z Beiträge)
- PHP
- Java
Dabei ist das in den eckigen Klammern jeweils die Foren-Kategorie. Jetzt habe ich aber meinen "alten" Code benutzt, wo ich noch nie mit SQL-Joins gearbeitet habe, deshalb mache ich da unglaublich viele SQL-Queries.
Im obigen Beispiel habe ich nämlich noch die Anzahl der Threads, Beiträge, Foren aufgelistet. Dafür habe ich jeweils immer eine mysql_num_rows-Abfrage benutzt. Also für jede EINZELNE Foren-Kategorie. Was wäre sinnvoller in dem Fall zu benutzen? UNION oder JOIN oder was ganz anderes, um die einzelnen Zahlen auszurechen und auszugeben?
Klickt man jetzt z.B. auf PHP, geht man in der Hierarchie eine Stufe runter und man sieht dann sozusagen [Programmierung] als Oberkategorie, dafür keine Anzahl der Foren mehr, aber Anzahl der Threads und Beiträgen.
Klickt man nun auf einen Thread geht es wieder eine Stufe runter und man sieht nur noch die Anzahl der Beiträge und die Beiträge selbst.
Was nun meine Frage ist, ist eigentlich "nur", wie viele Abfragen effizienterster Weise benötigt werden? Also, mit den wenigsten mit denen man in Hinsicht auf Performance auskommen könnte?Geändert von lisali (20.06.10 um 10:01 Uhr)
Liebe Grüße,
Lisa
-
Hallo,
ich hätte eine Frage zu meinem JOIN-Code, wo ich echt viele Joins mache, um die Beiträge anzuzeigen.
Also hier bin ich in einem Foren-Thread drin:
Mit der Funktion comments() gebe ich die Beiträge aus, jedoch werden die Beiträge jeweils vierfach ausgegben. Liegt das etwa an den ganzen Joins oder am WHERE oder an was anderes?PHP-Code:if ($_GET['s'] == 'forum' && isset($_GET['bid']) && isset($_GET['tid']))
{
$query = mysql_query("SELECT
ft.`id`, ft.`title`,ft.`uid`,ft.`icon`,ft.`hits`,
f.`name`,f.`about`,f.`sub_id`,
fp.`uid`,fp.`text`,fp.`date`,
u.`username`
FROM `forum_threads` AS ft
LEFT JOIN `forum_posts` AS fp
ON ft.`id` = fp.`tid`
LEFT JOIN `forum` AS f
ON f.`sub_id` = ft.`sub_id`
LEFT JOIN `users` AS u
ON fp.`uid` = u.`id`
WHERE ( ft.`id`='".$_GET['tid']."' )
ORDER BY fp.`id` DESC");
$forum = mysql_fetch_array($query);
mysql_query("UPDATE `forum_threads` SET `hits`=`hits`+1 WHERE `id`='".$_GET['tid']."'");
echo "<div><h1><a href='?s=forum&bid=".$_GET['bid']."sub_id=".$forum[`f`.sub_id]."'>".$forum['name']."</a></h1>
<br>".$forum['about']."<br><br></div><h1>".$forum['title']."</h1> (".$forum['hits']."x aufgerufen)<br><br>";
echo comments($query);
An der Funktion comments() selbst kann es eigentlich nicht liegen, weil es nur eine while-Schleife ist und für die Formatierung der Beiträge auf der ganzen Seite zuständig ist.
Ich habe rausgefunden, dass die Extra-Anweisung mit dem fetch_array von $forum sozusagen die comments blockt. Jedenfalls entzieht er dann dem nächsten Fetch-Array, das durch comments() stattfindet einen Eintrag.
Kann mir jemand erklären wieso das so ist oder sollte ich für die Ausgabe, die keine Schleife benötigt (Thread-Titel, etc.), eine Extra-Query schreiben?Liebe Grüße,
Lisa
-
Hi
schaue dir doch einmal diese Funktion an: mysql_data_seek()Bei Problemen mit Codes, postet bitte den entsprechenden Codeausschnitt und setzt den in entsprechende Tags.
( [cpp] [/cpp] [css] [/css] [html] [/html] [java] [/java] [javascript] [/javascript] [php] [/php] [sql] [/sql] )
"Funktioniert nicht" ist keine Fehlermeldung. Bitte eine genaue Fehlerbeschreibung und, wenn vorhanden, Fehlermeldungen posten.
RegEx Tutorial
PHP Funktionsreferenz
-
Vielen Dank, die Funktion kannte ich noch nicht!
Wenn ich bei der Foren-Übersicht bin und dort jeweils die Threads, Beiträge, Foren einer Foren-Kategorie zählen möchte, muss ich dazu echt 3 SQL-Abfragen schreiben?
Ich habe allesmögliche (wahrscheinlich falsch) versucht mit JOINS oder Union, aber ich komme nicht dahinter wie man das in eine SQL-Abfrage schafft. Ich möchte nicht so viele Abfragen senden und den Speicher so belasten.
Was kann ich da machen?
Edit:
So mache ich das nämlich:
PHP-Code:$rows = mysql_query("SELECT `id` FROM `forum` WHERE `sub_id`='".$sub['id']."'");
$num1 = mysql_num_rows($rows);
$rows = mysql_query("SELECT `id` FROM `forum_threads` WHERE `sub_id`='".$sub['id']."'");
$num2 = mysql_num_rows($rows);
$rows = mysql_query("SELECT `id` FROM `forum_posts` WHERE `sub_id`='".$sub['id']."'");
$num3 = mysql_num_rows($rows);
echo "<div class='fr'><h3>".$num1."</h3> Foren <h3>".$num2."</h3> Themen <h3>".$num3."</h3> Beiträge</div>";
Geändert von lisali (20.06.10 um 11:27 Uhr)
Liebe Grüße,
Lisa
-
Bei einem halbwegs normalisierten Tabellenschema: ja.
Solang du nicht auf tatsächlich messbare Durchsatzprobleme wegen zu vieler Anfragen stößt, würde ich mir darüber keine Gedanken machen. Im Gegenteil: wenn man versucht, krampfhaft vollkommen unterschiedliche Abfragen über Joins zu kombinieren, kann das auch mal nach hinten los gehen und viel länger dauern als der einfache Ansatz. Die Anzahl der Abfragen ist nicht alles, viel wichtiger sind z.B. sinnvoll gesetzte Indizes.
Es ist immer gut, wenn man der Datenbank genau mitteilt, was man möchte. In diesem Fall bist du nur an der Anzahl der Zeilen interessiert, die ein bestimmtes Kriterium erfüllen. Stattdessen fragst du hier aber nach der Spalte id, die dich eigentlich überhaupt nicht interessiert. Mach es stattdessen besser explizit, was du wissen willst:
Grüße,PHP-Code:$result = mysql_query("SELECT COUNT(*) FROM `forum` WHERE `sub_id`='".$sub['id']."'");
$row = mysql_fetch_row($result);
$num1 = $row[0];
// etc.
Matthias„Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
“For every complex problem, there is an answer that is short, simple and wrong.”
“Pessimism is safe, but optimism is a lot faster!”
Aktuelles Coding Quiz: #17 - Wörter kreuz und quer
Ähnliche Themen
-
Entwicklung eines Forums
Von Metha im Forum Relationale DatenbanksystemeAntworten: 1Letzter Beitrag: 12.08.06, 08:41 -
Struktur eines Forums
Von Philipp_Frank im Forum PHPAntworten: 35Letzter Beitrag: 22.01.05, 12:25 -
Bau eines Forums
Von Uffi im Forum PHPAntworten: 1Letzter Beitrag: 24.10.03, 15:50 -
Programmieren eines Forums
Von SwissRicola im Forum Relationale DatenbanksystemeAntworten: 3Letzter Beitrag: 21.03.03, 13:21 -
Einrichten eines Forums! (phpBB)
Von Zorck im Forum PHPAntworten: 3Letzter Beitrag: 20.08.02, 20:00





Zitieren


Login





