Optimale MySQL Query zur Erfassung von Themen Inhalten in einem Unterforum XY - Druckversion +- MyBB.de Forum (https://www.mybb.de/forum) +-- Forum: Sonstiges (https://www.mybb.de/forum/forum-1.html) +--- Forum: Programmierung (https://www.mybb.de/forum/forum-32.html) +--- Thema: Optimale MySQL Query zur Erfassung von Themen Inhalten in einem Unterforum XY (/thread-13572.html) |
Optimale MySQL Query zur Erfassung von Themen Inhalten in einem Unterforum XY - Riccardo - 22.06.2009 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. PHP-Code: $Abfrage = $db->query(" RE: Optimale MySQL Query zur Erfassung von Themen Inhalten in einem Unterforum XY - frostschutz - 22.06.2009 Ich würde das spontan auf zwei Queries aufteilen. Aber vielleicht kommt ja jemand noch auf eine bessere Lösung. Zitat:Ich bräuchte praktisch immer den ersten Screenshot von allen den Anhängen. Code: SELECT MIN(a.aid) AS screenshot Das ist jeweils der erste Screenshot (als attachment-id) von allen in Frage kommenden Anhängen. Der Rest ist trivial: Ausgehend von diesen Screenshots holst du dir das Posting / den Thread und damit das Datum / den Titel / den Autor. RE: Optimale MySQL Query zur Erfassung von Themen Inhalten in einem Unterforum XY - Riccardo - 22.06.2009 Danke frostschutz für Deinen Vorschlag. Ich lasse das Thema trotzdem mal noch offen, falls jemand noch irgendwelche Ergänzungen, Anmerkungen, Verbesserungen oder Optimierungen dazu parat hat. RE: Optimale MySQL Query zur Erfassung von Themen Inhalten in einem Unterforum XY - frostschutz - 22.06.2009 Bin mir allerdings auch nicht sicher ob man das mit Thumbnail so machen kann, also ob jedes Bild einen Thumbnail hat. Kleine Bilder haben vielleicht gar keinen. Hab ich nicht nachgeschaut. Wäre nur einfacher so zu schreiben als auf jeden Image-Typ zu testen. Aber bei Screenshots gehts vermutlich eh nur um deutlich größere Grafiken. Und der Test ob der User berechtigt ist, die Attachments / die Threads zu sehen fehlt natürlich auch noch. RE: Optimale MySQL Query zur Erfassung von Themen Inhalten in einem Unterforum XY - Riccardo - 23.06.2009 Zitat:Kleine Bilder haben vielleicht gar keinen Das kann ich bestätigen. In diesem Fall muss ich testen, ob die Thumbnail-Spalte leer ist und wenn ja ein Standardbild anzeigen. Zitat:Und der Test ob der User berechtigt ist, die Attachments / die Threads zu sehen fehlt natürlich auch noch Was in diesem Falle unerheblich ist, da es sich um eine öffentliche Unterseite handelt, die gerade den Unregistrierten eine Art schnelle Übersicht bzw. Vorschau geben soll, welche Inhalte die Seite denn anzubieten hat. Erst lange im Forum alles durchgucken wollen Gäste ja bekanntlich sowieso nicht |