[mysql] Tabellen richtig verknüpfen

DerEineDa schrieb:
Ich bin mir sicher, dass MySQL das quasi schon immer beherrschte. Unterabfragen sind ja nun auch nichts so exotisches, auch wenn Anfänger das gerne glauben.
Das ist Schmarrn. Bis vor einiger Zeit waren Subqueries sehr wohl exotisch, bzw. wurden überhaupt nicht von allen Datenbanken unterstützt. Im professionellen Bereich, in dem man mehrere Datenbanken unterstützten muss, werden Subqueries eher selten bis garnicht benutzt.
 
Zuletzt bearbeitet:
Das wiederum erachte ich als Schmarrn. Wahrscheinlich habe ich in den letzten Jahren einfach mit zu guten Datenbanken gearbeitet, aber jedes mir bekannte Datenbanksystem unterstützt in der einen oder anderen Form Subqueries, wie es ja auch im SQL-Standard beschrieben ist. Nicht umsonst gibt es die Ausdrücke IN(subquery), SOME/ANY,EXISTS.. Wird nun etwas zu Off-Topic hier. Das Problem ist einfach, dass es immer wieder Abfragen gibt, die ohne Unterabfragen schwer oder gar nicht zu lösen sind.

Mit Unterabfragen lässt sich auch das Problem von BadByte relativ einfach lösen, auch wenn ich das immernoch nicht sonderlich elegant finde. Aus irgendeinem Grund kam ich vorher nicht auf die Idee, anscheinend war ich mal wieder übermüdet:

Code:
SELECT t.autor,
t.datum,
t.title,
t.hits
(SELECT a.autor FROM forumantworten a WHERE t.id = a.themenid ORDER BY a.datum DESC LIMIT 1) AS letzter_poster,
(SELECT a.datum FROM forumantworten a WHERE t.id = a.themenid ORDER BY a.datum DESC LIMIT 1) AS letztes_datum,
FROM forumthemen t

Das ist die kürzeste, mit Sicherheit funktionierende Lösung (hab's gerade selber ausprobiert), die ich gerade anbieten kann - erfordert aber dummerweise wieder Unterabfragen. Diese Abfrage ist auch ohne Unterabfragen eine extrem harte Nuss, aber wahrscheinlich auch zu schaffen.

Was TheNoxier sagt, ist übrigens auch absolut richtig: Es ist eine gute Idee, den letzten Beitrag (oder die zugehörigen Daten) mit in die Themen-Tabelle abzuspeichern, wodurch du dir hier den ganzen Aufwand sparst. Dadurch brauchst du zwar bei jedem neuen Beitrag eine UPDATE oder INSERT-Anweisung, aber es ist ja davon auszugehen, dass mehr im Forum gelesen als geschrieben wird, weswegen das die Datenbank entlasten kann. Datenbanktechnisch ist das streng genommen eine ungern gesehene Redundanz, aber der Zweck heiligt eben manchmal die Mittel. Große Forum-Systeme wie vBulletin machen das übrigens genauso, da gibt es in der Thread-Tabelle auch die Spalten "lastpost" (Timestamp) und "lastposter" (Benutzername).
 
gut, dann noch eine letzte Frage, ich hab auf meinem Server auch die Option PostgreSQL zu benutzten. Giebts da die Unterabfragen schon länger (ist PostgreSQl eigentlich besser als MySQL?)
 
BadByte schrieb:
(ist PostgreSQl eigentlich besser als MySQL?)
Nein und Ja. Jede Datenbank hat seine Stärken und Schwächen. Je nach Anwendungsgebiet, ist für die eine Datenbank sinnvoller/besser als eine andere.

Siehe Google: postgresql vs mysql
 
Ja, PostgreSQL unterstützt Unterabfragen (soweit ich gerade weiß), allerdings habe ich noch nie versucht über PHP solch eine Datenbank anzusprechen. Aber ich weiß, dass PHP das unterstützt.

Ob PostgreSQL besser ist, das ist Ansichtssache. Sie hält sich eher am SQL-Standard und unterstützt allgemein mehr Befehle und Funktionen, zB. für die referenzielle Integrität (weiß nicht wie weit MySQL 5 da nun ist) oder Mengenoperation wie INTERSECT (MySQL kann nur UNION).
Ich denke für Internet-Geschichten wird MySQL nicht ohne Grund öfter eingesetzt.

PostgreSQL liefert wunderbare Tools zur Administration direkt mit. Du kannst dir ja mal einfach die Windows-Version runterladen und auf deinem eigenen Computer testen, ob das so alles hinhaut.
 
Zurück
Oben