Kleines Foren-Problem: Sortierung nach neuen Beiträgen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Kleines Foren-Problem: Sortierung nach neuen Beiträgen

    Hallo in die Runde!

    Ich quäl mich mal wieder mit ner leidigen SQL-Abfrage rum, die mich schon den ganzen Nachmittag beschäftigt, aber ich kriegs nicht gebacken. Vielleicht kann mir jemand auf die Sprünge helfen, der ein bißchen mehr Abstand hat als ich momentan...ich glaub ich bin in ner mentalen Sackgasse gelandet

    Problematik:

    Ich schreibe gerade ein kleines Forum, was sich optisch an den gängigen Forensystemen orientiert (ich hab ein bißchen in phpBB rumgeschnüffelt und mir paar Ideen bzgl. DB-Aufbau geholt).

    Ich möchte, daß immer das Topic in der Beitragsübersicht oben steht, wo zuletzt reingepostet wurde. Momentan funkt das bei mir nicht, ich schaffs nur nach Erstellungsdatum des Topics zu ordnen.

    Es gibt folgende Tabellen:
    PHP-Code:
    CREATE TABLE `posts` (
      `
    post_idmediumint(8unsigned NOT NULL auto_increment,
      `
    topic_idsmallint(8unsigned NOT NULL default '0',
      `
    post_subjectvarchar(60NOT NULL default '',
      `
    post_texttext NOT NULL,
      `
    poster_idmediumint(8NOT NULL default '0',
      `
    post_timeint(11NOT NULL default '0',
      `
    poster_ipvarchar(15NOT NULL default '0.0.0.0',
      `
    post_activechar(1NOT NULL default '0',
      
    PRIMARY KEY  (`post_id`)
    TYPE=MyISAM AUTO_INCREMENT=;

    # --------------------------------------------------------

    #
    # Tabellenstruktur für Tabelle `topics`
    #

    CREATE TABLE `topics` (
      `
    topic_idmediumint(8NOT NULL auto_increment,
      `
    topic_titlevarchar(60NOT NULL default '',
      `
    topic_postermediumint(8NOT NULL default '0',
      `
    topic_timeint(11NOT NULL default '0',
      `
    topic_activechar(1NOT NULL default '0',
      
    PRIMARY KEY  (`topic_id`)
    TYPE=MyISAM AUTO_INCREMENT=;

    # --------------------------------------------------------

    #
    # Tabellenstruktur für Tabelle `users`
    #

    CREATE TABLE `users` (
      `
    user_idmediumint(8NOT NULL auto_increment,
      `
    usernamevarchar(25NOT NULL default '',
      `
    user_passwordvarchar(32NOT NULL default '',
      `
    user_emailvarchar(255NOT NULL default '',
      `
    user_firstnamevarchar(20NOT NULL default '',
      `
    user_lastnamevarchar(35NOT NULL default '',
      `
    user_regtimevarchar(11NOT NULL default '',
      
    PRIMARY KEY  (`user_id`)
    TYPE=MyISAM AUTO_INCREMENT=
    Abfragen tu ich im PHP-Script so:
    PHP-Code:
    $sql "SELECT topics.*, users.* 
    FROM topics,users 
    WHERE users.user_id = topics.topic_poster 
    ORDER BY topic_time DESC"

    topic_time ist aber, wie oben schon gesagt, die Erstellzeit des Topics.
    post_time wäre die richtige Spalte, nach ich ordnen müsste, aber irgendwie muss ich die posts-Tabelle ja erstmal in die Abfrage reinkriegen, bzw. muss halt immer Erstellzeit des neusten Postings des jeweiligen abgefragten Topics mit rein. Argh, mir platzt der Kopf...

    Ich hatte was mit ner zusätzlichen WHERE-Klausel versucht, à la (SELECT MAX(post_time)) versucht, aber das hat nicht geklappt

    Der Quelltext vom phpBB hilft mir da auch nicht sehr weiter, obwohl das bei dem Ding ja genauso funktioniert, wie ich das will. Aber ich find nicht mal die verantwortliche Codezeile

    Ich glaub fast die Unterteilung Topics/Posts in zwei Tabellen war für meine Zwecke gar nicht so sinnvoll...kommt halt davon, wenn man zuviel abschaut


    Würde mich freuen, wenn mir jemand auf die Sprünge helfen kann
    "...vielleicht stehe ich vor dir und du erkennst mich nicht. Spielt das eine Rolle? Wir sah'n ins gleiche Licht..."

  • #2
    ich habe mir die DB struktur jetzt nicht genau angesehen ...

    aber du kannst doch bei jedem post das aktuelle datum auch in der topictabelle setzen.

    so braucht du auch keinen join mehr für die abfrage, wo das aktuellste drin ist.
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      Schnell wie immer

      Wenn ich dich richtig verstehe, eine zusätzliche Spalte bei den Topics anlegen (meinetwegen last_post oder so) und dort jedesmal den letzten Postingtimestamp reinspeichern?

      Stimmt, das ist eigentlich ziemlich genial. So brauch ich in der Übersicht die olle posts-Tabelle gar nicht

      Danke!
      "...vielleicht stehe ich vor dir und du erkennst mich nicht. Spielt das eine Rolle? Wir sah'n ins gleiche Licht..."

      Kommentar


      • #4
        @lodi: bist du auch zufällig der Lodi bei FL?
        Sunshine CMS
        BannerAdManagement
        Borlabs - because we make IT easier
        Formulargenerator [color=red]Neu![/color]
        Herkunftsstatistik [color=red]Neu![/color]

        Kommentar

        Lädt...
        X