kleinste Zeit pro User

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

  • kleinste Zeit pro User

    Hallo zusammen,

    ich hab grad ne Denkblockade, vielleicht kann mir wer weiterhelfen,
    Ich habe zwei Tabellen
    Tabelle user und Tabelle zeiten
    welche über die User_ID verbunden sind. Jetzt ist es so, dass in der Zeiten tabelle ein User mit mehreren Zeiten drinstehen kann und ich in der Ausgabe nur jeweils die beste Zeit des Users stehen haben möchte, so wie ich es jetzt mache funktioniert es nicht, sprich total ist nicht die Summe aus hin und zurück, Mir ist auch klar wieso das so ist(Min(...)) aber ich komm nicht drauf, wie ich es machen soll
    PHP-Code:
    SELECT
     DISTINCT
    (s.userID),
     
    u.name as name,
     
    DATE_FORMAT(s.date,'%d.%m.%Y') AS date,
     
    TIME_FORMAT(s.journey_there'%i:%s') AS journey_there,
     
    TIME_FORMAT(s.return_journey'%i:%s') AS return_journey,
     
    MIN(TIME_FORMAT(total'%i:%s')) AS total
    FROM
     
    #__skifftest s,
     #__users u,
     #__additional_info a
    WHERE
     YEAR
    (s.date) = ".$year." AND
     
    a.gender '".$gender."' AND
     
    s.userID u.id AND
     
    u.id a.user_ID
    GROUP BY
     s
    .userID
    ORDER BY
     s
    .total ASC 

  • #2
    also erstmal gruppierst Du nicht nach allen single cols, d.h. Du kannst unerwartete ergebnisse bekommen, dann würde ich eher date_format(MIN()) machen

    Steht nun im DB Feld total die differenz drin oder willst Du die auch noch berechnen??
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      in total steht die summe der beiden Felder journey_there und return_journey, ist zwar eigentlich unnötig, aber egal.
      was du mir mit dem Group By sagen möchtest versteh ich nicht, ich kann doch nicht nach allen Spalten, die ich selektieren gruppieren, sonst kommen ja wieder mehrere Pro User raus?!

      Kommentar


      • #4
        naja aber du selektierst zB ein datum und kannst bei deiner gruppierung irgendein datum bekommen, das aber nicht unbedingt zum gefundenen aggregat gehört
        Beantworte nie Threads mit mehr als 15 followups...
        Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

        Kommentar


        • #5
          Also irgendwie komm ich immer noch nicht dahinter, was du mir sagen willst. Ich fühl mich grad wie n Anfänger..
          Ich möchte eine Liste haben, die nach der gesamtzeit geordnet ist und wo jeder User mit seiner besten Zeit drin steht, wenn ich nach mehr als der user_ID gruppiere, bekomme ich immer mehr Zeilen zurück, als ich eigentlich haben will, denn alle anderen Werte unterscheiden sich ja wieder!?

          Kommentar


          • #6
            Ok wenn Du nur den user brauchst warum selektierst Du dann ein datum, ich meinte lediglich wenn Du nicht nach dem datum sortierst und es mehrere verschiedene gibt, die zu deiner gruppierung passen, dann bekommst Du nicht unbedingt das datum, dass auch zu deiner aggregatsfunktion passt. In deinem fall bekommst Du dann min(total) und ein datum das zu deinem user passt, aber nicht unbedingt zum min(total).

            haste es mal so probiert:

            Code:
            SELECT
             s.userID,
             u.name,
             TIME_FORMAT(MIN(s.journey_there-s.return_journey) '%i:%s') AS total
            FROM
             #__skifftest s,
             #__users u,
             #__additional_info a
            WHERE
             YEAR(s.date) = ".$year." AND
             a.gender = '".$gender."' AND
             s.userID = u.id AND
             u.id = a.user_ID
            GROUP BY
             s.userID, u.name
            ORDER BY
            3 ASC
            Beantworte nie Threads mit mehr als 15 followups...
            Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

            Kommentar


            • #7
              Also so bekomm ich n leeres Ergebnis..
              ich brauch eigentlich alles was in der Abfrage drin ist, damit das ganze nachher in etwa so aussieht wie im Anhang. Da sieht man auch den Fehler der Auftritt auf Platz zwei. Die totale Zeit ist zwar richtig eingeordnet auch dem richtigen User, aber die Hin und Rückzeit sind halt falsch und dafür brauch ich ne Lösung. Datum muss auch erhalten bleiben, damit man weiß, wann das passiert ist. Ist so eine Abfrage überhaupt möglich?
              Angehängte Dateien

              Kommentar


              • #8
                ja hin und rückzeit sind genau wegen Deiner gruppierung falsch...
                löse das über Join mit einem subselect
                wobei Du das max(total) und die userid im subselect holst und dann deine user tabelle referenzierst über die user id ...
                Zuletzt geändert von MelloPie; 14.01.2009, 14:18.
                Beantworte nie Threads mit mehr als 15 followups...
                Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                Kommentar


                • #9
                  so...des Rätsels Lösung
                  PHP-Code:
                  SELECT
                   u
                  .name,
                   
                  DATE_FORMAT(s.date,'%d.%m.%Y') AS date,
                   
                  TIME_FORMAT(s.journey_there'%i:%s') AS journey_there,
                   
                  TIME_FORMAT(s.return_journey'%i:%s') AS return_journey,
                   
                  TIME_FORMAT(s.total'%i:%s') AS total
                  FROM 
                   
                  #__skifftest s,
                   #__users u,
                   #__additional_info a
                  WHERE
                   total 
                  = (SELECT 
                          MIN
                  (total
                         
                  FROM 
                          jos_skifftest 
                         WHERE 
                          YEAR
                  (s.date) = ".$year." AND
                          
                  userID s.userid) AND
                   
                  a.gender '".$gender."' AND
                   
                  YEAR(s.date) = ".$year." AND
                   
                  s.userID u.id AND
                   
                  u.id a.user_ID
                  ORDER BY 
                   total ASC 
                  Danke MelloPie

                  Kommentar

                  Lädt...
                  X