[SQL allgemein] letzen Eintrag und nicht ersten auslesen

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

  • [SQL allgemein] letzen Eintrag und nicht ersten auslesen

    Ich habe ein Problem mit dem hierdrunter stehendem SQL SELECT-Statement. Ich bekomme eigentlich alles ausgegeben was ich haben will, nur sind alle posting_* Sachen falsch, denn es wird das erste Vorkommnis in der Datenbank genutzt und nicht das letze. Ich speichere in der DB in snap_forums die ID des letzen Postings in diesem Forum und diese soll auch ausgelesen werden aus snap_postings aber ich bekomme wie schon erwähnt immer nur den ersten Eintrag des Forums und nicht den dem die ID gehört.

    Code:
    SELECT
    	a.title              AS forums_title,
      	a.ID                 AS forums_id,
            COUNT(DISTINCT b.ID) AS threads_count,
            COUNT(c.ID)          AS postings_count,
            d.username           AS user_name,
            c.ID                 AS posting_id,
            c.title              AS posting_title,
            c.postdate           AS posting_date,
            a.lastpostid         AS lastpost_id
    FROM
            snap_forums    a                            LEFT JOIN
            snap_threads   b     ON a.ID = b.FID        LEFT JOIN
            snap_postings  c     ON b.ID = c.TID        LEFT JOIN
            snap_user      d     ON d.ID = c.UID        LEFT JOIN
            snap_forums    e     ON a.lastpostid = c.ID
    GROUP BY
            a.ID;
    Admin of RealScripts

  • #2
    Vermutung:

    1. DISTINCT bewirkt fast das selbe wie GROUP.. ist Dir klar?
    2. Außerdem, wenn dann DISTINCTROW
    3. Order BY mitversuchen

    Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
    sondern mit den Augen das Manual zu lesen.

    Kommentar


    • #3
      DISTINCROW?

      Krass nu hab ich nochn Fehler gefunden -.- Wenn einer der Postings im Forum nem anderen Thread zugewiesen wird, ist dieser angeblich nichtmehr in dem Forum. Scheint so als hätte ich da wo die ForumID mit der ThreadID verwechselt oder so :!
      Admin of RealScripts

      Kommentar


      • #4
        2. Außerdem, wenn dann DISTINCTROW
        wieso das denn?
        Die Zeit hat ihre Kinder längst gefressen

        Kommentar


        • #5
          Original geschrieben von derHund
          wieso das denn?
          gute Frage
          [color=blue]MfG Payne_of_Death[/color]

          [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
          [color=red]Merke:[/color]
          [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

          Murphy`s Importanst LAWS
          Jede Lösung bringt nur neue Probleme
          Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
          In jedem kleinen Problem steckt ein großes, das gern raus moechte.

          Kommentar


          • #6
            o_O naja also bei mir bringts bei dem SELECT-Statement eigentlich keinen Unterschied ob nun DISTINCT oder DISTINCTROW
            Admin of RealScripts

            Kommentar


            • #7
              schau dir mal folgenden Thread an:
              http://www.php-resource.de/forum/sho...threadid=42179

              Kommentar


              • #8
                1.
                Damit wollte ich nur sicherstellen, ob er auch weiß, dass es GROUP BY-Effekt hat.

                2.
                Also würd's verwenden, damit nicht nur DISTINCT zum Einsatz kommt, sondern, dass auch doppelte Ergebnisse ( über mehrere Tabellen! ) vermieden werden.

                Es kommt nicht darauf an, mit dem Kopf durch den Monitor zu rennen,
                sondern mit den Augen das Manual zu lesen.

                Kommentar


                • #9
                  Okay das MAX() kann ich gebrauchen (danke ) aber wie schon erwähnt bekommsch ned die Anzahl der Postings im Forum. Also sobald ich die ThreadID des Postings änder hab ich im Forum ein Posting weniger obwohl das Posting noch im selben Forum ist nur eben in einem anderen Thread.
                  Admin of RealScripts

                  Kommentar


                  • #10
                    wie sieht denn jetzt deine Abfrage aus?

                    hänge mal einen Dump der Tabellen mit Testdaten als txt an.

                    Kommentar


                    • #11
                      Also die Abfrage habe ich nun nochmal gelassen, aber hier mal die Daten der DB:

                      Code:
                      CREATE TABLE `snap_categories` (
                        `ID` int(10) unsigned NOT NULL auto_increment,
                        `title` varchar(45) NOT NULL default '',
                        PRIMARY KEY  (`ID`)
                      ) TYPE=InnoDB COMMENT='Kategorien' AUTO_INCREMENT=2 ;
                      
                      INSERT INTO `snap_categories` VALUES (1, 'Allgemein');
                      
                      CREATE TABLE `snap_forums` (
                        `ID` int(10) unsigned NOT NULL auto_increment,
                        `CID` int(10) unsigned NOT NULL default '0',
                        `title` varchar(45) NOT NULL default '',
                        `lastpostid` int(10) unsigned NOT NULL default '0',
                        PRIMARY KEY  (`ID`)
                      ) TYPE=InnoDB COMMENT='Foren' AUTO_INCREMENT=2 ;
                      
                      INSERT INTO `snap_forums` VALUES (1, 1, 'Neuigkeiten', 3);
                      
                      CREATE TABLE `snap_postings` (
                        `ID` int(10) unsigned NOT NULL auto_increment,
                        `TID` int(10) unsigned NOT NULL default '0',
                        `UID` int(10) unsigned NOT NULL default '0',
                        `title` varchar(45) NOT NULL default '',
                        `post` text NOT NULL,
                        `postdate` varchar(10) NOT NULL default '',
                        PRIMARY KEY  (`ID`)
                      ) TYPE=InnoDB COMMENT='Einträge' AUTO_INCREMENT=4 ;
                      
                      INSERT INTO `snap_postings` VALUES (1, 1, 1, 'Neues aus dem Westerwald', 'Hallo :D', '1103225070');
                      INSERT INTO `snap_postings` VALUES (2, 1, 1, 'Testzwecke', 'Ja ich teste das ganze mal', '1103225076');
                      INSERT INTO `snap_postings` VALUES (3, 2, 1, 'Re:', 'Hallo dies ist eine Antwort :D', '1103461172');
                      
                      CREATE TABLE `snap_threads` (
                        `ID` int(10) unsigned NOT NULL auto_increment,
                        `FID` int(10) unsigned NOT NULL default '0',
                        `UID` int(10) unsigned NOT NULL default '0',
                        `PID` varchar(45) NOT NULL default '',
                        PRIMARY KEY  (`ID`)
                      ) TYPE=InnoDB COMMENT='Threads' AUTO_INCREMENT=2 ;
                      
                      INSERT INTO `snap_threads` VALUES (1, 1, 1, '1');
                      
                      CREATE TABLE `snap_users` (
                        `ID` int(10) unsigned NOT NULL auto_increment,
                        `username` varchar(45) NOT NULL default '',
                        `passwd` varchar(32) NOT NULL default '',
                        PRIMARY KEY  (`ID`)
                      ) TYPE=InnoDB COMMENT='Benutzer' AUTO_INCREMENT=2 ;
                      
                      INSERT INTO `snap_users` VALUES (1, 'freq9', '123456');
                      Admin of RealScripts

                      Kommentar


                      • #12
                        Dein Grouping is nich gut, man gruppiert nach allen single cols.
                        Beantworte nie Threads mit mehr als 15 followups...
                        Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                        Kommentar

                        Lädt...
                        X