ORDER BY bei Joins

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

  • ORDER BY bei Joins

    Also mit Joins habe ich keine Erfahrung. Bekomme aber eine Abfrage hin.
    Das Problem ist aber eine sortierte Abfrage.

    Ich schreibe mir gerade ein Forum und möchte mir die Tabelle
    mm_threads
    id | fid | topic | created
    anzeigen.

    Das möchte ich aber sortiert anzeigen und zwar soll der Thread in dem zuletzt geschrieben wurde ganz oben stehen.

    Die Tabelle mm_answers
    id | tid | fid | user | topic | text | created

    Die Abfrage holt mir zwar schon die Ergebnisse raus, aber nicht geordnet.
    PHP-Code:
    SELECT 
                mm_threads
    .idmm_threads.fidmm_threads.topicmm_answers.created
            FROM 
                mm_threads
    mm_answers
            WHERE  mm_threads
    .fid=2
            
            GROUP BY mm_threads
    .id 
             
            ORDER BY mm_answers
    .created DESC 
    Wie muß ich denn da rangehen?
    Erst die Tabelle mm_answers mit den Antworten abfragen und denn die Tabelle mit den Threads abfragen?
    Gut geraten ist halb gewußt.

  • #2
    wenn ich das recht in errinnerung habe mit left joins dann war das folgender maßen:

    PHP-Code:
    SELECT
        mm_threads
    .id,
        
    mm_threads.fid,
        
    mm_threads.topic,
        
    mm_answers.created
    FROM mm_threads

    LEFT JOIN mm_answers
    ON mm_threads
    .id mm_answers.tid
    ORDER BY mm_answerds
    .created DESC
    MfG
    Alex

    Kommentar


    • #3
      Re: ORDER BY bei Joins

      Ich fürchte irgendwie Sub-Select oder zwei Queries ... weil du vor dem Gruppieren nochmal sortieren müsstest, was aber in einem Query nicht möglich ist

      Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

      bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
      Wie man Fragen richtig stellt

      Kommentar


      • #4
        hmmm stimmt... seh gerade das meins nit gehen kann.. weil in answers stehen ja logischerweise mehrere werte mit selber thread id :/

        Kommentar


        • #5
          Also erstmal danke für die Antworten. Ich denke mal auch das ich um 2 Abfragen nicht rumkomme, weil ich gestern schon alles mögliche probiert habe. Ich probiere erstmal eine sub select abfrage, und wenn das nicht geht 2 querys.
          Gut geraten ist halb gewußt.

          Kommentar


          • #6
            ähnliches Problem:
            http://www.php-resource.de/forum/sho...312#post295312

            Kommentar


            • #7
              Original geschrieben von asp2php
              ähnliches Problem:
              http://www.php-resource.de/forum/sho...312#post295312
              Das ist ja ne abartige Lösung ^^;

              Irgendwie blöd, dass es für solch einen Fall keine vernünftige Lösung vom DBMS aus gibt ... so selten ist eine gewünschte Sortierung vor der Gruppierung ja nun wirklich nicht~

              Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

              bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
              Wie man Fragen richtig stellt

              Kommentar


              • #8
                ähm ... du meinst vielleicht bequemer

                Kommentar


                • #9
                  JUHU...
                  Danke @asp2php
                  Du hast mir den Weg gezeigt....

                  Nach Stundenlangen testen ist es mir jetzt mit left join geglückt. Ich teste morgen nochmal gründlich und poste dann die Lösung. Für heute mach ich Schluss.
                  Gut geraten ist halb gewußt.

                  Kommentar


                  • #10
                    Und das brachte mich an das Ziel.
                    PHP-Code:
                    $komando->query("SELECT
                                        "
                    .THREADS.".id, 
                                        "
                    .THREADS.".fid, 
                                        "
                    .THREADS.".topic, 
                                        "
                    .ANSWERS.".tid,
                                        MAX("
                    .ANSWERS.".created) AS last_datum
                                    FROM "
                    .ANSWERS."
                                    LEFT JOIN "
                    .THREADS." ON ".THREADS.".id = ".ANSWERS.".tid
                                    WHERE
                                        "
                    .THREADS.".fid=".$_GET["fid"].
                                    GROUP BY 
                                        "
                    .THREADS.".id        
                                    ORDER BY last_datum DESC"
                    ); 
                    Aber so eine Abfrage könnte man auch mit anderen Joins durchführen?
                    Left Joins ist in diesem Fall nur zu empfehlen weil es effektiver ist?
                    Nur mal sone Frage. Weil, wenn ich nächstes mal eine Abfrage mache ist ja nicht gesagt, das denn auch left joins das beste ist. Mir ist nur noch nicht ganz klar, wann welcher Join zu benutzen ist.
                    Gut geraten ist halb gewußt.

                    Kommentar


                    • #11
                      LEFT, RIGHT oder INNER JOIN, das ist immer abhängig davon, was für dich jeweils relevant ist.

                      Mit INNER JOIN brauchst du nur die Schnittmenge.
                      Mit LEFT JOIN brauchst du die gesammte linke Tabelle und die Teil(Schnitt)menge der rechten Tabelle, RIGHT JOIN analog

                      Es gibt aber auch Fälle wo der CROSS JOIN gebraucht wird, ist aber eher selten.

                      Du musst von Fall zu Fall immer selbst entscheiden

                      Kommentar


                      • #12
                        Was meinst du mit Schnittmenge?
                        Ok, denn muß ich beim nächsten mal sehen.
                        Gut geraten ist halb gewußt.

                        Kommentar


                        • #13
                          ähm ... dir fehlt aber was von mathematischen Grundlagen

                          Kommentar

                          Lädt...
                          X