MYSql Abfrage

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

  • MYSql Abfrage

    N'Abend allerseits

    Habe nur ein kleines Problem, ob mir jemand auf die Sprünge helfen kann?

    Ich hab Tabelle X1 welche nach einem Feld aus Tabelle X2 sortiert werden soll.
    Andersrum: Ein kleines Forum, X1 sind Topics, X2 Posts. Nun sollen die Topics nach dem letzten Post sortiert werden. X2 enthält eine Spalte mit den ID's von X1 (logisch). Ist das irgendwie einfach realisierbar? Ich kriegs einfach net geblickt (kann auch am Fieber liegen)

    Grüsse
    [COLOR=orangered]Welch triste Epoche, in der es leichter ist, ein Atom zu zertrümmern als ein Vorurteil![/COLOR]

    cubetech in Bern » Webdesign, Infrastruktur, Social Media, VoIP

  • #2
    select distinct x1.topictitle from x1 left join x2 on x1.id=x2.id_of_x1 order by x2.postdate desc

    Kommentar


    • #3
      danke
      [COLOR=orangered]Welch triste Epoche, in der es leichter ist, ein Atom zu zertrümmern als ein Vorurteil![/COLOR]

      cubetech in Bern » Webdesign, Infrastruktur, Social Media, VoIP

      Kommentar


      • #4
        funktioniert nur zu 98%, er nimmt aus den post-einträgen nicht den letzten eintrag sondern den ersten... und sortiert danach die threads mit DESC wie im befehl nach der zeit des ersten eintrages. wo liegt da der haken?

        join und order für den fall hier - das kenne ich noch nicht...
        [COLOR=orangered]Welch triste Epoche, in der es leichter ist, ein Atom zu zertrümmern als ein Vorurteil![/COLOR]

        cubetech in Bern » Webdesign, Infrastruktur, Social Media, VoIP

        Kommentar


        • #5
          arrggg ich habe group by vergessen, so soll es sein

          select distinct x1.topictitle from x1 left join x2 on x1.id=x2.id_of_x1 group by x1.topictitle order by x2.postdate desc

          Kommentar


          • #6
            "DISTINCT Spaltenname" ist aber identisch mit "GROUP BY Spaltenname" - 100%ig (MySQL macht intern einen GROUP BY wenn es DISTINCT parsed)? zudem löst es das problem noch nicht...
            [COLOR=orangered]Welch triste Epoche, in der es leichter ist, ein Atom zu zertrümmern als ein Vorurteil![/COLOR]

            cubetech in Bern » Webdesign, Infrastruktur, Social Media, VoIP

            Kommentar


            • #7
              nun, so funktioniert es:

              PHP-Code:
                     $query mysql_query('
                    SELECT t.*, IFNULL(max(a.time),t.ctime) AS Datum
                    FROM '
              .$cfg_page_shortkey.'_forum_topics AS t
                    LEFT JOIN '
              .$cfg_page_shortkey.'_forum_posts AS a
                    ON t.tid=a.tid
                    WHERE t.fid='
              .$fid.'
                    AND t.group<='
              .usrFGroup().'
                    GROUP BY t.tid
                    ORDER BY Datum DESC'
              ) or die(mysql_error()); 
              [COLOR=orangered]Welch triste Epoche, in der es leichter ist, ein Atom zu zertrümmern als ein Vorurteil![/COLOR]

              cubetech in Bern » Webdesign, Infrastruktur, Social Media, VoIP

              Kommentar


              • #8
                so und hier noch das schnipsel welches noch die posts zählt und nur threads ausliest in welchen mindestens ein post existiert:

                PHP-Code:
                       $query mysql_query('
                      SELECT t.*, COUNT(a.pid) AS Posts, IFNULL(max(a.time),t.ctime) AS Datum
                      FROM '
                .$cfg_page_shortkey.'_forum_topics AS t
                      LEFT JOIN '
                .$cfg_page_shortkey.'_forum_posts AS a
                      ON a.tid=t.tid
                      WHERE t.fid='
                .$fid.'
                      AND t.tid=a.tid
                      AND t.group<='
                .usrFGroup().'
                      GROUP BY t.tid
                      ORDER BY Datum DESC'
                ) or die(mysql_error()); 
                EDIT:

                Zur deklaration:
                userFGroup() guckt ob der Thread aus der richtigen Benutzergruppe stammt (1-4)
                $fid ist die Forum-ID
                tid die Thread-Id
                pid die Post-ID
                time die posttime der posts
                ctime die createtime der threads
                und zu guter letzt ist $cfg_page_shortkey eine seitenbedingte configvariable, welche in jeder tabelle in der datenbank im namen vorkommt.

                grüsse

                Zuletzt geändert von chrigu99; 13.01.2007, 10:44.
                [COLOR=orangered]Welch triste Epoche, in der es leichter ist, ein Atom zu zertrümmern als ein Vorurteil![/COLOR]

                cubetech in Bern » Webdesign, Infrastruktur, Social Media, VoIP

                Kommentar


                • #9
                  Original geschrieben von chrigu99
                  "DISTINCT Spaltenname" ist aber identisch mit "GROUP BY Spaltenname" - 100%ig (MySQL macht intern einen GROUP BY wenn es DISTINCT parsed)? zudem löst es das problem noch nicht...
                  Quark, quark ....

                  Zum einen hat deine Lösung nichts mit der Ausgangsituation zu tun, du hast zuwenig Information gegeben, wie soll man da genauer helfen. Zum anderen hat distinct wenig mit group by zu tun, von Fall zu Fall mag das Ergebnis gleich aussehen, aber die DBMS macht bestimmt nicht das was du vermutest. Beim nächsten Mal werde ich mit Sicherheit 3 Tage warten bevor ich dir helfe, denn man weiss ja nie, ob du schon alles gesagt hast

                  Kommentar


                  • #10
                    guten morgen erstmal

                    Gut, das mit dem Distinct hatte ich mal so gelernt, in dem Fall umlernen... =) Zudem ist es mir gestern echt mies gegangen, hatte recht hohes Fieber. Daher mögest Du mich bitte entschuldigen.
                    Trotzdem danke ich Dir für Deine Hilfe welche mich dann heute morgen auf das passende Ergebnis brachte mit IFNULL.

                    Grüsse
                    [COLOR=orangered]Welch triste Epoche, in der es leichter ist, ein Atom zu zertrümmern als ein Vorurteil![/COLOR]

                    cubetech in Bern » Webdesign, Infrastruktur, Social Media, VoIP

                    Kommentar


                    • #11
                      Zudem hatte ich trotzdem nicht gaaaanz unrecht (Auszug aus der MySQL-Doku):

                      Code:
                       In most cases, a DISTINCT clause can be considered as a special case of
                       GROUP BY. For example, the following two queries are equivalent:
                      
                      SELECT DISTINCT c1, c2, c3 FROM t1 WHERE c1 > const;
                      
                      SELECT c1, c2, c3 FROM t1 WHERE c1 > const GROUP BY c1, c2, c3;
                      [COLOR=orangered]Welch triste Epoche, in der es leichter ist, ein Atom zu zertrümmern als ein Vorurteil![/COLOR]

                      cubetech in Bern » Webdesign, Infrastruktur, Social Media, VoIP

                      Kommentar

                      Lädt...
                      X