schwieriger SQL select

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

  • #16
    Original geschrieben von Burnout
    Vorweg: anders ging es bisher nicht, ich hatte es erst so
    wie du sagtest
    Gleiches Ergebnis, soeben mit den Testdaten ausprobiert.

    Abgesehen davon:
    Code:
    SELECT tbl1.ID, tbl1.user_ID, tbl1.head, Date_FORMAT(tbl1.posted, '%d.%m.%Y  %H:%i') Datum,
    MAX(tbl2.posted) as tmp, ISNULL(MAX(tbl2.posted)) tmp2, COUNT(tbl2.ID)
    FROM forum_thread AS tbl1 LEFT JOIN forum_posts AS tbl2 ON tbl1.ID=tbl2.thread_ID
    WHERE tbl1.board_ID=1
    GROUP BY tbl1.ID
    ORDER BY tmp2 DESC, tmp DESC

    Und wenn ich dir mal ein paar Queries zur "Verfeinerung" der Tabellen mitgeben darf:
    Code:
    ALTER TABLE `forum_thread` DROP INDEX `ID`;
    ALTER TABLE `forum_thread` ADD INDEX ( `board_ID` );
    ALTER TABLE `forum_board` DROP INDEX `ID`;
    ALTER TABLE `forum_posts` DROP INDEX `ID` ;
    ALTER TABLE `forum_posts` ADD INDEX ( `thread_ID` );
    Primary u. Unique = Doppelt Gemoppelt
    Die anderen Indizes sind dazu da um den Join etwas fixer zu machen
    Code:
    EXPLAIN query
    hilft und offenbarte in deinem Falle, ohne meine zusätzlichen Queries, zwei FullScans, was über kurz oder lang den Server in die Knie zwingt x.x

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

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

    Kommentar


    • #17
      PHP-Code:
      $sql "SELECT tbl1.ID,tbl1.user_ID,tbl1.head,";
      $sql .= "Date_FORMAT(tbl1.posted, '%d.%m.%Y  %H:%i'),MAX(tbl2.posted) as tmp,COUNT(tbl2.ID)";
      $sql .= " FROM forum_thread AS tbl1 LEFT JOIN forum_posts AS tbl2 ON tbl1.ID=tbl2.thread_ID ";
      $sql .= "WHERE tbl1.board_ID='".$board_ID."' OR";
      $sql .= " (tbl1.board_ID='".$board_ID."' AND tbl2.thread_ID IS NULL)";
      $sql .= " GROUP BY tbl1.ID ORDER BY ISNULL(tbl2.thread_ID) DESC,tmp DESC"
      Ich weis ich habe die Klammer noch drinn aber es geht echt nicht ohne.
      ^^

      Kommentar


      • #18
        Du musst auch das Wörtchen "OR" in der Zeile oberhalb weglassen. (ghostgambler wird mir zustimmen?).

        Möglicherweise ist deine originale query etwas anders und beim Umschreiben ins Forum und Zurückschreiben ist nicht alles eins-zu-eins gelaufen. Aber die Hauptsache ist natürlich, dass es jetzt geht.

        Kommentar


        • #19
          Original geschrieben von phoenix97i
          Du musst auch das Wörtchen "OR" in der Zeile oberhalb weglassen. (ghostgambler wird mir zustimmen?).
          jop

          Und es funktioniert, definitiv. Beweis siehe oben in der Theorie und in der Praxis auf meinem lokalen MySQL-Server.

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

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

          Kommentar


          • #20
            Richtig es funktioniert und dann gilt never touch a running system

            Kommentar

            Lädt...
            X