2 Abfragen auf 1 Tabelle zusammenrechnen und sortieren

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

  • 2 Abfragen auf 1 Tabelle zusammenrechnen und sortieren

    Hallo,

    vielleicht kann mir jemand weiterhelfen...

    Ich programmiere gerade eine Anwendung womit ich Filmfehler verwalten kann. Die Schwierigkeit dabei ist, dass jeder Filmfehler einen Punktwert (je nach schwere des Fehlers) bekommt. Es soll eine Top Ten der Filme mit den meisten Fehlern (also mit dem höchsten Gesamt-Fehlerwert) und eine Top Ten der Regiesseure (auch mit den höchsten Gesamt-Fehlerwert) angezeigt werden.

    Tabelle besteht aus den Spalten: ID, FILMTITEL, FEHLER, REGIE, FEHLERWERT

    Ich hab das versucht so zu lösen:
    PHP-Code:
      $strQuery="select REGIE from FILMFEHLER GROUP BY REGIE ORDER BY FEHLERWERT DESC LIMIT 10";
      
    $result mysql_db_query($DBName$strQuery);
      
    $xi 1;
      while (
    $row mysql_fetch_row ($result)) {
            
    $strQuerygesamt="select sum(FEHLERWERT) as summe FROM FILMFEHLER where REGIE = '".$row[0]."'";
            
    $resultgesamt mysql_db_query($DBName$strQuerygesamt);
               while (
    $rowgesamt mysql_fetch_row ($resultgesamt)) {
                  
    $summe $rowgesamt[0];
               }
          echo 
    "<tr>";
          echo 
    "<td width=\"10%\">".$xi.".</td>";
          echo 
    "<td width=\"72%\">".$row[0]."</td>";
          echo 
    "<td width=\"18%\">".$summe."</td>";
          echo 
    "</tr>";
      
    $xi++;
     } 
    Es werden also bei der ersten Abfrage die 10 Regisseure mit dem höchsten Fehlerwert abgefragt wobei durch "GROUP BY" doppelte vermieden werden und dann erfolgt direkt die 2. Abfrage in der jeweils einzeln, zu dem aus der ersten Abfrage ermittelten Regisseur, die Gesamtfehler aus allen verschiedenen Einträgen abgefragt werden.

    Ist nötig, denn z.B. Steven Spielberg könnte mit mehreren Filmen in der Datenbank stehen.

    Das Problem:
    Es wird nicht mehr korrekt sortiert, da er ja eigentlich erst nach der Abfrage sortieren sollte, aber genau das krieg ich nicht hin. So sieht es bei mir gerade so aus:
    1. Steven Spielberg 40 Punkte (mit einem Film in der db)
    2. Kevin Costner 30 Punkte (mit einem Film in der db)
    3. Oliver Stone 35 Punkte (mit 2 Filmen in der db, jeweils 10 und 25 punkte)
    usw usw

    Wer weiss Rat? Ich würde das gerne mit der einen Tabelle umsetzen und nicht eine 2. für die Regisseure anlegen. Man müsste doch eigentlich erstmal alles abfragen (also quasi zuerst beide Abfragen starten), das evtl. in ein Array speichern, dann sortieren lassen und dann erst ausgeben. Aber genau das kriege ich nicht hin. Vielleicht hab ich auch den komplett falschen Lösungsansatz?

    Für die Top Ten der Filme hab ich es genauso versucht. Wäre identisch

    Danke im Voraus!

  • #2
    Mach die zweite query so:

    select sum(FEHLERWERT) as summe, REGIE FROM FILMFEHLER where REGIE = '".$row[0]."' ORDER BY summe DESC";
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      Naja, nicht ganz. Aber danke für den Denkanstoss. Hab's hinbekommen indem ich das komplette 2. Query gelöscht habe und die erste Abfrage so schreibe
      PHP-Code:
      SELECT SUM(FEHLERWERT) AS SUMMEREGIE FROM FILMFEHLER GROUP BY REGIE ORDER BY SUMME DESC LIMIT 10 
      Der Block sieht dann jetzt so aus:

      PHP-Code:
        $strQuery="SELECT SUM(FEHLERWERT) AS SUMME, REGIE FROM FILMFEHLER GROUP BY REGIE ORDER BY SUMME DESC LIMIT 10";
            
      $result mysql_db_query($DBName$strQuery);
            
      $xi 1;
            while (
      $row mysql_fetch_row ($result)) {
              echo 
      "<tr>";
              echo 
      "<td width=\"10%\">".$xi.".</td>";
              echo 
      "<td width=\"72%\">".$row[1]."</td>";
              echo 
      "<td width=\"18%\">".$row[0]."</td>";
              echo 
      "</tr>";
             
      $xi++;
           } 
      Vielen Dank für die Hilfe. Die Query zu ändern war genau der Hinweis den ich brauchte...

      Kommentar


      • #4
        Das Query wäre mein erster Vorscvhlag gewesen allerdings erhältst Du da die top ten der Summen nicht die der Fehlerwerte.
        zB ein Film hat 15 Fehler mit Fehlerwert = 1 und ein anderer hat einen Fehler mit Fehlerwert = 10 dann müsste aus Deiner Ausgangsfrage der zweite Film vor dem ersten liegen.
        Beantworte nie Threads mit mehr als 15 followups...
        Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

        Kommentar

        Lädt...
        X