1 up | 2 up |
^^^ Additional posts ^^^
zorg.ch
#39669 by @ 27.07.2004 11:36 - nach oben -
sorry, ich hab den mysqld schon wieder crashen lassen. (verdammt)

jetzt weiss ich wenigstens in welcher region das problem liegt. und zwar hat er offenbar mühe mit join's von grösseren datenmengen. bei diesem query ist er gecrasht:

SELECT c.* FROM comments c LEFT JOIN comments t ON (t.thread_id=c.thread_id AND t.date>c.date) WHERE t.id IS NULL ORDER BY c.date DESC
zorg.ch
#39677 by @ 27.07.2004 12:00 - nach oben -
Self joins sind unschön bei Tabellen > 6 MB... und womöglich kann er nichtmal einen Index verwenden für dein Ding.
zorg.ch
#39680 by @ 27.07.2004 12:17 - nach oben -
Dann erstell einen Index oder mach den Join schöner :)
zorg.ch
#39684 by @ 27.07.2004 12:25 - nach oben -
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.
zorg.ch
#39687 by @ 27.07.2004 12:29 - nach oben -
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.
zorg.ch
#39691 by @ 27.07.2004 12:33 - nach oben -
Der Thread würde dann sozusagen "generiert" aus dem ersten Post, sobald dieser gemacht wird, ok.
zorg.ch
#39694 by @ 27.07.2004 12:35 - nach oben -
genau so.
zorg.ch
#39698 by @ 27.07.2004 12:54 - nach oben -
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.
zorg.ch
#39701 by @ 27.07.2004 13:07 - nach oben -
korrekt. und noch den lastpost
zorg.ch
#39702 by @ 27.07.2004 13:21 - nach oben -
Wozu den lastpost?
zorg.ch
#39708 by @ 27.07.2004 13:31 - nach oben -
damit du für die forum übersicht nur die thread table brauchst.
Additional posts
zorg.ch
#39705 by @ 27.07.2004 13:26 - nach oben -
Und der (Thread-)Post...
zorg.ch
#39706 by @ 27.07.2004 13:30 - nach oben -
Also ich dachte, dass der Thread-Post trotzdem ein normaler Post wird.
So gibts keine Unterschiede zwischen den einzelnen Posts.
zorg.ch
#39710 by @ 27.07.2004 13:33 - nach oben -
Ich denke es ist besser wenn wir tatsächliche Threads haben. Es gibt noch mehr Probleme als nur wohin sie gehören.
Additional posts
zorg.ch
#39685 by @ 27.07.2004 12:25 - nach oben -
wörfäd äm züg ah!

chasch nöd wenigstens dä "t.date>c.date" usserhalb vom join machä ?
zorg.ch
#39689 by @ 27.07.2004 12:31 - nach oben -
nei, denn laufts nüm.
zorg.ch
#39703 by @ 27.07.2004 13:23 - nach oben -
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?
zorg.ch
#39709 by @ 27.07.2004 13:31 - nach oben -
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?
zorg.ch
#39717 by @ 27.07.2004 13:55 - nach oben -
weiss nicht, wie viel ein index performance- und vor allem stabiliäts-mässig bringen würde...
zorg.ch
#39719 by @ 27.07.2004 14:05 - nach oben -
EXPLAIN! :P
zorg.ch
#39723 by @ 27.07.2004 14:09 - nach oben -
Wäre noch interessant zum testen, aber ich biko möchte wohl nicht nochmals riskieren dass der mysql abkratzt... ich sage: nur zu! :-)
zorg.ch
#39726 by @ 27.07.2004 14:12 - nach oben -
Ich kann ihn dann ja mal wieder neustarten ;)
zorg.ch
#39729 by @ 27.07.2004 14:14 - nach oben -
:-) biko looooooooos!
zorg.ch
#39809 by @ 27.07.2004 15:36 - nach oben -
yea, fett. mit index tuts! jetzt brauchen wir doch keine threads-table.
zorg.ch
#39811 by @ 27.07.2004 15:39 - nach oben -
sehr gut! baust dus gleich ein?
zorg.ch
#39812 by @ 27.07.2004 16:00 - nach oben -
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?
Additional posts
zorg.ch
#39813 by @ 27.07.2004 16:01 - nach oben -
das lastpost-feld brauchts übrigens von mir aus auch nicht mehr. bevor wir das aber löschen, musst du das auch überall aus dem code nehmen.
zorg.ch
#39815 by @ 27.07.2004 16:03 - nach oben -
moment, ist das ganze mit deinem query auch schnell ?
Additional posts
zorg.ch
#39823 by @ 27.07.2004 16:10 - nach oben -
Könnten wir uns einigen solche Sachen künftig in den Bugtracker einzutragen? Dann muss ichs nämlich nicht in meine Agenda eintragen.
Additional posts
zorg.ch
#39835 by @ 27.07.2004 17:21 - nach oben -
Ok.... also keine Thread-Table... aber es wäre vielleicht trotzdem edel eine zu haben...
Wir hätten dort drin: foreign_thread_id und was noch?
zorg.ch
#39716 by @ 27.07.2004 13:54 - nach oben -
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.
zorg.ch
#39721 by @ 27.07.2004 14:06 - nach oben -
Ihr koennt ne andere Version haben, wenn ihr den Aufwand bezahlt ;)

(Das Problem haettet ihr jetzt mit einem eigenen Server nicht :P)
zorg.ch
#39722 by @ 27.07.2004 14:07 - nach oben -
ja...aber neimand sagt das der mysqld auf einem eigenen server nicht abkackt...aber lassen wir diese diskussion...
zorg.ch
#39724 by @ 27.07.2004 14:11 - nach oben -
Lern lesen ;)

Biko ging es um Subqueries, nicht ums abstuerzen.
zorg.ch
#39727 by @ 27.07.2004 14:13 - nach oben -
ist mir schon klar...aber ich meinte das es nicht erwiesen ist, das dieses query mit subquerys stabil läuft...
zorg.ch
#39738 by @ 27.07.2004 14:26 - nach oben -
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.
zorg.ch
#39750 by @ 27.07.2004 14:37 - nach oben -
Lesen, dann Posten
zorg.ch
#39754 by @ 27.07.2004 14:44 - nach oben -
Du bietest uns deine Unterstützung an, da steht aber nichts davon dass du das auch gratis machts.
zorg.ch
#39761 by @ 27.07.2004 14:56 - nach oben -
Gut, es war so gemeint :)
zorg.ch
#39766 by @ 27.07.2004 15:00 - nach oben -
Eben, also bringt uns ein eigener Server in dem Punkt keinen Vorteil.
zorg.ch
#39794 by @ 27.07.2004 15:15 - nach oben -
Also..

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.
Additional posts
zorg.ch
#40275 by @ 31.07.2004 14:40 - nach oben -
Du hast Glück (#40265), dass ich jetzt nicht anfange, darüber zu diskutieren.
Aber mit Rootserver hätten wir sicher weniger Probleme.
zorg.ch
#40368 by @ 01.08.2004 15:40 - nach oben -
Hätten wir ganz bestimmt.
Falls du dich nicht mehr an die Fraggeria II erinnern kannst, ich gehör jetzt auch zu den Rootserver Befürwortern.
zorg.ch
#39752 by @ 27.07.2004 14:42 - nach oben -
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.
zorg.ch
#39760 by @ 27.07.2004 14:56 - nach oben -
Sieht gut aus, bin nicht sicher obs nicht so schon drin ist. Ich schau mal am Abend.
zorg.ch
#39770 by @ 27.07.2004 15:01 - nach oben -
Wenns ja schon Funktioniert, was hat dann der Biko gemacht?
zorg.ch
#39781 by @ 27.07.2004 15:07 - nach oben -
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.
zorg.ch
#39793 by @ 27.07.2004 15:14 - nach oben -
Weshalb sind denn bei meiner Selektion nicht Posts aus allen Boards drin?
Eigentlich haben wird doch noch gar keine Boards..
zorg.ch
#39798 by @ 27.07.2004 15:17 - nach oben -
*seufz* mit boards meinen wir gallery, smarty etc. Bei deiner Selektion sind posts aus allen boards drin.
zorg.ch
#39818 by @ 27.07.2004 16:05 - nach oben -
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.
Additional posts
zorg.ch
#39806 by @ 27.07.2004 15:25 - nach oben -
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.
zorg.ch
#39782 by @ 27.07.2004 15:07 - nach oben -
das tut nicht. und zwar nimmt er den * nicht vom gleichen datensatz wie das max(date) drin ist.
zorg.ch
#39792 by @ 27.07.2004 15:14 - nach oben -
nicht? group by sollte das doch bewerkstelligen?
zorg.ch
#39800 by @ 27.07.2004 15:18 - nach oben -
tut er aber nicht, habs grad angeschaut....
zorg.ch
#39802 by @ 27.07.2004 15:20 - nach oben -
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?
zorg.ch
#39805 by @ 27.07.2004 15:24 - nach oben -
SELECT *, min(date), max(date), count(date)
bringt nichts, aber das:

SELECT thread_id, max( lastpost ) AS lastpost
FROM `comments`
GROUP BY thread_id
ORDER BY lastpost DESC LIMIT 0 , 30

(* in ner group by drin zu haben ist glaub uncool)
zorg.ch
#39807 by @ 27.07.2004 15:28 - nach oben -
* in ner group gibt dir einfach irgend ein datensatz aus der group.

deine variante tut, weil die thread_id ja in jedem datensatz der group gleich ist. aber jetzt hast du noch keine infos welches der letzte post ist.
zorg.ch
#39810 by @ 27.07.2004 15:39 - nach oben -
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