Forum Sql Abfrage - Thread ersteller anzeigen

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

  • Forum Sql Abfrage - Thread ersteller anzeigen

    Guten Morgen Forumgemeinde

    also ich möchte in meinem Forum in der Forenübersicht anzeigen,
    welcher User den Thread eröffnet hat, das will mir aber nicht gelingen.

    PHP-Code:
    $sql "SELECT 
               "
    .GRUPPEN.".gid,
               "
    .GRUPPEN.".gruppe,   
               "
    .FOREN.".fid, 
               "
    .FOREN.".forum_name,
               "
    .FOREN.".close AS forum_close,  
               "
    .THEMEN.".tid,
               "
    .THEMEN.".topic, 
               "
    .THEMEN.".hits,
               "
    .THEMEN.".verschoben,
               "
    .THEMEN.".close,     
               DATE_FORMAT(MAX("
    .ANTWORTEN.".created),'%d.%m.%y') AS datum_letzter_eintrag,
               DATE_FORMAT(MAX("
    .ANTWORTEN.".created),'%H:%i')    AS zeit_letzter_eintrag,
               count(distinct("
    .ANTWORTEN.".aid))                 AS antworten_anzahl,    
               MAX("
    .ANTWORTEN.".created)                         AS letzter_eintrag,
               MAX("
    .ANTWORTEN.".aid)                             AS last_id, 
               visit.tid     AS visit_tid,
               visit.user_id AS visit_user_id,
               visit.aid     AS visit_aid,      
               "
    .USER.".username                
           FROM "
    .GRUPPEN.
           LEFT JOIN "
    .FOREN."     ON (".GRUPPEN.".gid = ".FOREN.".gid)
           LEFT JOIN "
    .THEMEN."    ON (".FOREN.".fid = ".THEMEN.".fid)  
           LEFT JOIN "
    .ANTWORTEN." ON (".THEMEN.".tid = ".ANTWORTEN.".tid)
           LEFT JOIN "
    .USER."      ON (".ANTWORTEN.".userid = ".USER.".id) 
           LEFT JOIN "
    .VISIT." visit ON visit.user_id = '".$obj_user->id."' AND visit.tid = ".ANTWORTEN.".tid 
           WHERE "
    .GRUPPEN.".aktiv = 1
           AND   "
    .FOREN.".fid     = ".sicher_int($_GET['fid']).
           AND   "
    .FOREN.".aktiv   = 1  
           GROUP BY "
    .THEMEN.".tid
           ORDER BY letzter_eintrag DESC 
           "
    .$limit.";"
    Also ".USER.".username Ist die Tabelle für die User mit der Spalte username. Aber er zeigt mit immer den User an,
    der den letzten beitrag geschrieben hat.
    Wie kann ich den Anzeigen, der den Thread eröffnet hat?
    Zuletzt geändert von martinm79; 26.08.2007, 02:26.
    Gut geraten ist halb gewußt.

  • #2
    probier mal statt

    ORDER BY letzter_eintrag DESC

    ORDER BY letzter_eintrag ASC

    das ist ein schuss ins Blaue, und muss nicht funktionieren.... du verrätst nämlich leider nichts über deine Datenbankstruktur...

    Also Ratespiel, aber relativ hohe Erfolgschance ;-)

    greetz, high
    Good programming is 40% experience, 20% skill, 20% RTFM, 15% caffeine, and 5% attention to detail.
    When everything else fails, manipulate the data...
    Beschriftungen / Großformatdruck / Werbemittel

    Kommentar


    • #3
      Also ich habe den SQL String mal gekürzt.
      PHP-Code:
      $sql "SELECT    
                   g.gid,
                   g.gruppe,   
                   f.fid, 
                   f.forum_name,
                   f.close AS forum_close,  
                   t.tid,
                   t.topic, 
                   t.hits,
                   t.verschoben,
                   t.close,         
                   DATE_FORMAT(MAX(a.created),'%d.%m.%y') AS datum_letzter_eintrag,
                   DATE_FORMAT(MAX(a.created),'%H:%i')    AS zeit_letzter_eintrag, 
                   count(distinct(a.aid))                 AS antworten_anzahl, 
                   MAX(a.created)                         AS letzter_eintrag,
                   MAX(a.aid)                             AS last_id,    
                   v.tid                                  AS visit_tid,
                   v.user_id                              AS visit_user_id,
                   v.aid                                  AS visit_aid,     
                   u.username 
               FROM "
      .GRUPPEN." g  
               LEFT JOIN "
      .FOREN."     f ON g.gid = f.gid
               LEFT JOIN "
      .THEMEN."    t ON f.fid = t.fid                    
               LEFT JOIN "
      .ANTWORTEN." a ON t.tid = a.tid
               LEFT JOIN "
      .USER."      u ON a.userid = u.id
               LEFT JOIN "
      .VISIT."     v ON v.user_id = '".$obj_user->id."' AND v.tid = a.tid
               WHERE g.aktiv   = 1
               AND   f.fid     = "
      .sicher_int($_GET['fid']).
               AND   f.aktiv   = 1      
               GROUP BY t.tid
               ORDER BY letzter_eintrag ASC 
               "
      .$limit.";"
      Und nein bei letzter_eintrag ASC oder DESC bleibt das ergebnis gleich.
      Aber das liegt wohl auch an MAX()
      Ich lasse die Tabelle Antworten nach dem letzten ergebnis sortieren, damit ich das Datum des letzten Postings anzeigen kann.
      Ich müßte sogesehen einmal das Datum des letztes Postings und die kleinste id des Users haben.

      Ich poste mal die 2 relevanten Tabellen

      Tabelle USER
      id | status_id | username

      Tabelle ANTWORTEN
      aid | tid | userid | topic | antwort | created

      Das Forum ist normal aufgebaut.
      Erst die verschiedenen Gruppen.
      Dann die verschiedenen Foren.
      Dann in den Foren die verschiedenen Themen.
      Und in den Themen die Antworten.
      Und in jeder Antwort habe ich eine Spalte userid wo die id des User
      steht.
      Für die User benutze ich die Tabelle User.

      Gerne würde ich schreiben u.id = MIN(a.aid) AS first_posting
      Also mit MIN(a.id) den jüngsten Beitrag von den Antworten ermitteln
      und dann der Tabelle User zuweisen, aber das geht nicht. bzw. ich bekomme das nicht hin.
      Zuletzt geändert von martinm79; 26.08.2007, 03:13.
      Gut geraten ist halb gewußt.

      Kommentar


      • #4
        Und ich habe mal probiert.
        Wenn ich ORDER BY username ASC oder ORDER BY username DESC schreibe verändert sich nichts.
        Gut geraten ist halb gewußt.

        Kommentar


        • #5
          Also ich habe mir das nochmal alles überlegt.
          Also der folgende String ist zwar ungültig, aber von der Vorgehensweise
          hätte ich den gerne so eingesetzt.

          PHP-Code:
          LEFT JOIN ".FOREN."     f USING(gid)
          LEFT JOIN ".THEMEN."    t USING(fid)                    
          LEFT JOIN ".ANTWORTEN." a USING(tid)
          LEFT JOIN ".USER."      u ON a.userid u.id AND a.userid MIN(a.aid
          Nur das MIN() ist ja nicht erlaubt. Wie kann ich das so umsetzten?
          Gut geraten ist halb gewußt.

          Kommentar


          • #6
            Habe das Problem gelöst.
            Ich habe jetzt einfach in der Tabelle THEMEN auch eine Spalte user_id angelegt.
            Jetzt brauch ich nicht die User Tabelle mit den Antworten verbinden sondern gleich mit den Themen.
            Gut geraten ist halb gewußt.

            Kommentar

            Lädt...
            X