-
02. 01. 2007, 14:52 #1
SQL: Sortierung geht verloren - warum?
Tach zusammen,
ich moechte in einem phpBB-Forum eine zusammenfassende Information zeigen, die darstellen soll in welchem Thread zuletzt gepostet wurde, wie der Thread heißt und dazu ein Auszug des letzten Postings anzeigen.
Meine Versuche haben mich bisher soweit gebracht:
Um das kurz zu erklaeren:Code:SELECT t.topic_id, t.topic_title, u.username as topic_poster_username, u.user_id as topic_poster_user_id, u2.username as last_post_username, u2.user_id as last_post_user_id, pt.post_text as last_post_text FROM phpbb_posts as p INNER JOIN phpbb_topics as t ON t.topic_id = p.topic_id INNER JOIN phpbb_users as u ON u.user_id = t.topic_poster INNER JOIN phpbb_posts as p2 ON p2.post_id = t.topic_last_post_id INNER JOIN phpbb_users as u2 ON u2.user_id = p2.poster_id INNER JOIN phpbb_posts_text as pt ON pt.post_id = p2.post_id ORDER BY p.post_time DESC LIMIT 0, 5
Es wird nach den letzten Postings sortiert und diesem Posting zugeordnet in welchem Thread es gepostet wurde, wer es geschrieben hat und wer als letzes in den Thread geschrieben hat. Diese Infos werden dann ausgegeben und das funktioniert soweit auch einwandfrei.
Das Problem an der Sache ist nur, dass teilweise Threads doppelt auftauchen und egal wie ich das verhindern moechte wird mein Ergebnis immer verfaelscht. Arbeite ich bspw. mit GROUP BY t.topic_id, so geraet die Sortierung vollkommen außer Kontrolle und es wird nach der thread_id sortiert. Selbiges passiert, wenn ich mit bspw. DESTINCT t.topic_id in der Abfrage arbeite.
Hat irgendwer eine Idee, wie ich hinbekomme, dass jeder Thread nur einmal auftaucht und trotzdem nicht die Sortierung nach den letzten Posts verloren geht?
Ich danke euch schon mal im Voraus fuer saemtliche Denkanstoeße.
Lieben Gruß, Crashkid
-
02. 01. 2007, 15:25 #2
Re: SQL: Sortierung geht verloren - warum?
Ich persönlich bin kein Freund der INNER JOIN Syntax. Ich mag lieber die allgemein gültigere JOIN Syntax. Habe leider grade kein phpBB Dump zur Hand um dir das zeigen zu können.
Grundsätzlich fällt mir aber kein grund ein, warum ein SELECT DISTINCT nicht funktioniert?!
Genau so mal probiert?Code:SELECT DISTINCT t.topic_id, t.topic_title, u.username as topic_poster_username, u.user_id as topic_poster_user_id, u2.username as last_post_username, u2.user_id as last_post_user_id, pt.post_text as last_post_text FROM phpbb_posts as p INNER JOIN phpbb_topics as t ON t.topic_id = p.topic_id INNER JOIN phpbb_users as u ON u.user_id = t.topic_poster INNER JOIN phpbb_posts as p2 ON p2.post_id = t.topic_last_post_id INNER JOIN phpbb_users as u2 ON u2.user_id = p2.poster_id INNER JOIN phpbb_posts_text as pt ON pt.post_id = p2.post_id ORDER BY p.post_time DESC LIMIT 0, 5
-
02. 01. 2007, 18:57 #3
Re: SQL: Sortierung geht verloren - warum?
Ich muss sagen, dass ich auch nicht allzu sehr in MySQL versiert bin, aber wenn du sagst, dass JOIN besser als INNER JOIN ist, dann werde ich mich darueber mal schlau machen und kuenftig das verwenden.
Zitat von tiberian
Ja, ich habe genau das versucht. Leider geht das irgendwie nicht.
Zitat von tiberian
Ich poste mal zwei Bildchen der Abfrage, die dies deutlich machen:
http://www.250kb.de/u/070102/p/1951e0e4.png
Abb 1: Ohne DISTINCT
http://www.250kb.de/u/070102/p/395cbdd2.png
Abb 2: Mit DISTINCT
Wie man sieht geraet beim Einsatz von DISTINCT die Ordnung vollkommen durcheinander und es wird nach der topic_id sortiert.
Ich habe mich jedoch vergewissert, dass die Ordnung nach dem Zeitstempel des Postings die des Bildes ohne DISTINCT sein muss.
Irgendwie ziemlich verrueckt das Ganze!
Nachtrag:
Ich habe die Abfrage bei den Bildern nicht auf 5 limitiert, so dass man das Problem besser sehen kann.
-
02. 01. 2007, 22:02 #4
Re: SQL: Sortierung geht verloren - warum?
Hab zwar immer noch keinen aktuellen Dump am Start aber auf Anhieb sähe ein normaler Join so aus
versuch den mal (ist ungetestet)Code:SELECT t.topic_id, t.topic_title, u.username as topic_poster_username, u.user_id as topic_poster_user_id, u2.username as last_post_username, u2.user_id as last_post_user_id, pt.post_text as last_post_text FROM phpbb_posts AS p, phpbb_topics AS t, phpbb_users AS u, phpbb_posts AS p2, phpbb_users AS u2, phpbb_posts_text AS pt WHERE t.topic_id = p.topic_id AND u.user_id = t.topic_poster AND p2.post_id = t.topic_last_post_id AND u2.user_id = p2.poster_id ORDER BY p.post_time DESC LIMIT 5
-
03. 01. 2007, 11:45 #5
Re: SQL: Sortierung geht verloren - warum?
Vielen Dank, dass du dich so verkopfst, tiberian. Leider fuehrt aber auch diese Abfrage nicht zum Erfolg. Abgesehen davon, dass sie deutlich laenger braucht als die Abfrage mit INNER JOIN liefert sie leider auch vollkommen falsche Ergebnisse. Das scheint also auch nichts zu nuetzen ...
Nachtrag:
Ich habs
Es war eine fehlende "2" im ORDER-Befehl. So muss es heißen:Tiberian, dir vielen vielen Dank, dass du dich so fuer mich verkopft hast.Code:ORDER BY p2.post_time DESC
-
03. 01. 2007, 20:31 #6
Re: SQL: Sortierung geht verloren - warum?
hm - zugegeben, es war ungetestet, hätte aber funktionieren müssen *grummel* - Das ein INNER JOIN schneller ist, ist dagegen sehr interessant! Werde ich mir merken.
Zitat von crash[kid]
Naja, solange es nun funktioniert
-
03. 01. 2007, 20:51 #7
Re: SQL: Sortierung geht verloren - warum?
Warum es das nicht hat, kann ich auch nicht wirklich nachvollziehen. Ich habe es auch nochmals mit dem abgeaenderten ORDER-Statement versucht und es hat trotzdem nichts gebracht. Warum weiß ich allerdings auch nicht ...
Zitat von tiberian
Diese Quelle scheint das zu bestaetigen. Demnach werde ich wohl beim INNER JOIN bleiben. Die normale JOIN-Methode hat ca. 1 Minute - wenn nicht noch etwas mehr - laenger gedauert. Erschreckend!
Zitat von tiberian
Darueber bin ich sehr froh, das kannst du mir glauben. *g*
Zitat von tiberian
-
03. 01. 2007, 22:26 #8
Re: SQL: Sortierung geht verloren - warum?
Falls dich noch die Sache mit der Performance von Inner Joins interessiert
http://trash-wissen.de/2007-01-03/my...vs-inner-join/
-


Zitieren
mehr lesen...







Resident Evil 6 erscheint in...
Heute, 15:21 in gulli:news