Der Join lÀsst sich nicht schöner machen, trotz Index. Hab dasselbe mal vor ein paar Monaten probiert. Ich denke eine Thread Tabelle lÀsst sich nicht umgehen.
Die grosse Frage ist dann nur noch wie wirds mit den Non-Forum Posts machen.
die mĂŒssen auch einen eintrag in der thread-table haben. wichtig ist dafĂŒr nur die thread_id, der lastpost und das board. der rest kann man aus den anderen tables holen.
Normale Posts wĂŒrden dann einfach auch einen Thread generieren sobald er benötigt wird.
Seh ich das richtig, dass in der Thread Tabelle anschliessend hinterlegt ist, wohin (Forum, Wiki, Smarty ...) ein Thread gehört und seine ID.
Der eigentliche Content des Ersten Posts bleibt weiterhin als Eintrag in Comments.
Das ist ja MEGA ĂŒbel.
Wir sind uns doch einig, dass wir kein Tabellengebastel machen wollen oder?
Es braucht minimal mehr Zeit wenn per JOIN der Post noch "angezogen" wird.
die LastPostID reicht.
ja, da sagt auch niemand etwas anders, tschuder meint das der erste post nachwievor ein post bleibt, wobei dazu ein datensatz in der thread table erstellt wird der dann beschreibt das dieser post ein thread ist.
Das Query kann auch gar nicht Funktionieren.
Es gibt nÀmlich hoffentlich keine t.id die NULL sind.
Höchstens solche die '0' sind, aber auch von denen gibts keine.
Was willst du denn genau mit dem Query machen?
Offensichtlich versucht er mit diesem Query sÀmtliche neuste Posts pro Thread nach deren Datum aufzulisten. Eigentlich noch elegant, wÀre nicht auf diese Lösung gekommen, aber schade wenns Performance-MÀssig nicht drinliegt.
Biko: Eventuell wĂŒrde ein Index (Thread_id, Date) etwas nĂŒtzen?
kann ich machen. woher soll ich bei templates und gallery das thread-datum und den thread-starter nehmen? bei templates kann dafĂŒr die daten des templates nehmen. aber fĂŒr die pics?
durch die bedingung t.date>c.date im join gibt es genau ein result pro thread, wo die t.id NULL ist. und das ist der datensatz, wo das datum am grössten ist. neben einem subquery (das es bei der installierten mysql-version nicht gibt) ist das die einzige möglichkeit den ganzen datensatz zum maximalen datum pro thread zu bekommen.
Mit dem eigenen Server hĂ€tten wir das Problem, das irgend jemand die Sache warten mĂŒsste genau gleich, und diese Person (ich nehm mal an wir wĂŒrden dich dafĂŒr anstellen) wĂ€r auch nicht gratis.
Entweder bin ich immer noch zu muede um mich gescheit auszudruecken, oder du willst mich momentan einfach falsch verstehen.
Ich probiers nochmal:
Ich (Lukas Beeler), wuerde falls ihr (der Zooomclan) euch einen eigenen Server (bei Sylon oder einer anderen Firma, von mir aus auch einem privaten) auf euren (des Zooomclans) Wunsch hin die Wartung (Administration, Upgrades, etc.) als Freundschaftsdienst (d.h. ohne das fuer euch irgendwelche Kosten entstehen, ausgenommen natuerlich HW Einkaeufe, Ersatzteile, etc. pp.) uebernehmen.
Hm, langsam begin ich das ganze zu begreifen.
Die Linke Seite wird immer Angezeigt, die Rechte jedoch nur wenn was gefunden wird.
Es gibt pro Thread genau einmal Rechts nichts, nÀhmlich da wo das Datum am grössten ist.
Ich hab (wie an den Letzten beiden DB PrĂŒfungen) den LEFt JOIN mit irgendwas anderem verwechselt..
Ich probiers mal mit einem Workaround.
Select *, max(date) as datum from comments group by thread_id order by datum desc
Liefert den Neusten Post pro Thread, und ich finds es ist ziemlich schnell.
Ich nehme mir gerne die Zeit dir alles was wir machen Schritt fĂŒr Schritt zu erklĂ€ren, wenn du auch was tust. Ansonsten ist das herausgeworfene Zeit.
Er hat geschaut ob er die Forum-Ăbersicht machen kann dass posts aus allen Board drin kommen.
Ich weiss was mit Boards gemeint ist. Deshalb war ich ĂŒberrascht als du sagtest dass deine Selektion gleich aussieht und trotdem nicht die Posts aus allen Boards zusammengezogen wurden.
es sind schon alle posts drin. aber wir brauchen noch die trhead-info. z.b. den title aus dem smarty.
das hauptproblem liegt darin, den neuesten post zu finden. das ist auch der haupt-grund, wieso wir ne thread-table wollen. wenn das da funktionieren wĂŒrde, brĂ€uchten wir keine threads-table.
group by kann nicht zwei datensÀtze verhÀngen. du könntest ja auch SELECT *, min(date), max(date), count(date) machen. welcher sollte er dann nehmen?
Jo klar, so mĂŒsste mans dann glaub machen: (statt lastpostdate natĂŒrlich mit lastpostid)
SELECT comments.board, comments.thread_id, max( comments.lastpost ) AS lastpostdate, lastpost.id AS lastpostid, lastpost.text
FROM `comments`
LEFT JOIN comments AS lastpost ON ( lastpost.date = comments.lastpost )
GROUP BY comments.thread_id
ORDER BY lastpostdate DESC
LIMIT 0 , 30