Ich habe mir eine MyBB Unterseite screenshot.php gebastelt und ein Template dazu, nach der Anleitung (eine eigene MyBB Unterseite erstellen...).
Auf dieser Seite will ich nun aus einem Unterforum alle Beiträge anzeigen lassen mit Titel, Author und dem Thumbnail des hochgeladenen Screenshots der Person.
Ein Thema enthält bis zu zehn Screenshots und ein oder mehrere ZIP-Archive.
Ich bräuchte praktisch immer den ersten Screenshot von allen den Anhängen.
Dabei bin ich auf verschiedenartige Probleme und Fragen gestossen, die ich nicht mehr selbst lösen konnte.
Zum einen: Ich habe erkannt, dass ich dazu jeweils drei Tabellen pro Thema
abfragen muß, weil in der Tabelle Threads die Post-ID nicht gespeichert wird
bzw. weil in der Tabelle Attachments nicht auf die jeweilige Thread-ID mit
referenziert wird:
mybb_threads für die Threaddaten, Titel und Author
mybb_posts um die PID zu dem zugrundeliegenden Thread zu erhalten
mybb_attachments um die URL zum Thumbnail zu der PID des Threads zu erhalten
Wenn ich nun 10 Ergebnisse pro Seite anzeigen lassen will, bräuchte ich hier
theoretisch 10 x 3 Abfragen, also mindestens 30 SQL Abfragen nach meinem bisherigen Verständnis.
Wenn ich mich nun einem LEFT JOIN behelfe, was ich auch versucht habe, kann ich
die 3 Abfragen in eine packen, doch dann erhalte ich zu einem Thema mehrere Doppel-Ausgaben. Wenn das Thema 5 Anhänge hat erhalte ich fünf Rückgaben, wenn es drei hat drei usw.
Ein SELECT DISTINCT konnte das Problem nicht beheben.
Ein GROUP BY "t.TID" t=Tabelle Threads führte dazu, dass mir nur jeweils das erste Attachment zurückgeliefert wird. Wenn das nicht der Screenshot war, so erhalte ich nun in meiner Auflistung kein Vorschaubild zu dem Thema.
Also das Ganze sieht nun wie folgt aus:
Kann / muss man das noch irgendwie optimieren?
Wie bekomme ich das Attachment Screenshot anstatt des ZIP-Archives?
* AND (a.filetype='image/jpeg' OR a.filetype='image/gif' OR a.filetype='image/png')
Früher hatte ich noch die Zeile mit drin, wenn aber das erste ausgewählte
Attachment ein ZIP Archiv war, dann hat er einfach den Thread ganz
in der Auflistung ausgelassen, somit habe ich die Zeile wieder weggelassen.
Auf dieser Seite will ich nun aus einem Unterforum alle Beiträge anzeigen lassen mit Titel, Author und dem Thumbnail des hochgeladenen Screenshots der Person.
Ein Thema enthält bis zu zehn Screenshots und ein oder mehrere ZIP-Archive.
Ich bräuchte praktisch immer den ersten Screenshot von allen den Anhängen.
Dabei bin ich auf verschiedenartige Probleme und Fragen gestossen, die ich nicht mehr selbst lösen konnte.
Zum einen: Ich habe erkannt, dass ich dazu jeweils drei Tabellen pro Thema
abfragen muß, weil in der Tabelle Threads die Post-ID nicht gespeichert wird
bzw. weil in der Tabelle Attachments nicht auf die jeweilige Thread-ID mit
referenziert wird:
mybb_threads für die Threaddaten, Titel und Author
mybb_posts um die PID zu dem zugrundeliegenden Thread zu erhalten
mybb_attachments um die URL zum Thumbnail zu der PID des Threads zu erhalten
Wenn ich nun 10 Ergebnisse pro Seite anzeigen lassen will, bräuchte ich hier
theoretisch 10 x 3 Abfragen, also mindestens 30 SQL Abfragen nach meinem bisherigen Verständnis.
Wenn ich mich nun einem LEFT JOIN behelfe, was ich auch versucht habe, kann ich
die 3 Abfragen in eine packen, doch dann erhalte ich zu einem Thema mehrere Doppel-Ausgaben. Wenn das Thema 5 Anhänge hat erhalte ich fünf Rückgaben, wenn es drei hat drei usw.
Ein SELECT DISTINCT konnte das Problem nicht beheben.
Ein GROUP BY "t.TID" t=Tabelle Threads führte dazu, dass mir nur jeweils das erste Attachment zurückgeliefert wird. Wenn das nicht der Screenshot war, so erhalte ich nun in meiner Auflistung kein Vorschaubild zu dem Thema.
Also das Ganze sieht nun wie folgt aus:
Kann / muss man das noch irgendwie optimieren?
Wie bekomme ich das Attachment Screenshot anstatt des ZIP-Archives?
* AND (a.filetype='image/jpeg' OR a.filetype='image/gif' OR a.filetype='image/png')
Früher hatte ich noch die Zeile mit drin, wenn aber das erste ausgewählte
Attachment ein ZIP Archiv war, dann hat er einfach den Thread ganz
in der Auflistung ausgelassen, somit habe ich die Zeile wieder weggelassen.
PHP-Code:
$Abfrage = $db->query("
SELECT t.tid, t.fid, t.uid, t.username, t.subject, t.sticky, t.dateline, t.attachmentcount, t.views, a.aid, a.thumbnail, a.filetype
FROM ".TABLE_PREFIX."threads t
LEFT JOIN ".TABLE_PREFIX."posts p ON (p.tid = t.tid)
LEFT JOIN ".TABLE_PREFIX."attachments a ON (a.pid = p.pid)
WHERE t.fid=25 AND t.sticky=0 AND t.attachmentcount>0 *
GROUP BY t.tid
ORDER BY t.dateline DESC
LIMIT $von, $perpage
");
while($Thema = $db->fetch_array($Abfrage))
{
//In diesem Abschnitt befülle ich eine Variable mit den Daten und gebe sie
//später im Template zusammen mit einer Tabelle aus.
echo $Thema['subject']; //Das würde jetzt den Thementitel ausgeben
}
In der Politik ist es manchmal wie in der Grammatik: Ein Fehler, den alle begehen, wird schließlich als Regel anerkannt.
André Malraux
André Malraux