Ergebnis 1 bis 8 von 8
  1. #1
    back to the roots! Avatar von crash[kid]
    Registriert seit
    May 2005
    Ort
    gulli:board
    Beiträge
    1.947

    Standard 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:
    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
    Um das kurz zu erklaeren:
    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

  2. #2
    ex-Moderator Avatar von tiberian
    Registriert seit
    Sep 2003
    Ort
    K-Pax
    Beiträge
    5.389

    Standard 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?!
    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
    Genau so mal probiert?

  3. #3
    back to the roots!

    (Threadstarter)

    Avatar von crash[kid]
    Registriert seit
    May 2005
    Ort
    gulli:board
    Beiträge
    1.947

    Standard Re: SQL: Sortierung geht verloren - warum?

    Zitat Zitat von tiberian
    Ich persönlich bin kein Freund der INNER JOIN Syntax. Ich mag lieber die allgemein gültigere JOIN Syntax.
    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 Zitat von tiberian
    Genau so mal probiert?
    Ja, ich habe genau das versucht. Leider geht das irgendwie nicht.

    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.

  4. #4
    ex-Moderator Avatar von tiberian
    Registriert seit
    Sep 2003
    Ort
    K-Pax
    Beiträge
    5.389

    Standard 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
    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
    versuch den mal (ist ungetestet)

  5. #5
    back to the roots!

    (Threadstarter)

    Avatar von crash[kid]
    Registriert seit
    May 2005
    Ort
    gulli:board
    Beiträge
    1.947

    Standard 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:
    Code:
    ORDER BY p2.post_time DESC
    Tiberian, dir vielen vielen Dank, dass du dich so fuer mich verkopft hast.

  6. #6
    ex-Moderator Avatar von tiberian
    Registriert seit
    Sep 2003
    Ort
    K-Pax
    Beiträge
    5.389

    Standard Re: SQL: Sortierung geht verloren - warum?

    Zitat Zitat von crash[kid]
    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 ...
    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.

    Naja, solange es nun funktioniert

  7. #7
    back to the roots!

    (Threadstarter)

    Avatar von crash[kid]
    Registriert seit
    May 2005
    Ort
    gulli:board
    Beiträge
    1.947

    Standard Re: SQL: Sortierung geht verloren - warum?

    Zitat Zitat von tiberian
    hm - zugegeben, es war ungetestet, hätte aber funktionieren müssen *grummel*
    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 Zitat von tiberian
    Das ein INNER JOIN schneller ist, ist dagegen sehr interessant! Werde ich mir merken.
    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 Zitat von tiberian
    Naja, solange es nun funktioniert
    Darueber bin ich sehr froh, das kannst du mir glauben. *g*

  8. #8
    ex-Moderator Avatar von tiberian
    Registriert seit
    Sep 2003
    Ort
    K-Pax
    Beiträge
    5.389

    Standard 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/

  9.  
     
     

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •