[GROUP BY] bestimmten wert ausgeben

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

  • [GROUP BY] bestimmten wert ausgeben

    Hallo !

    Ich probiere schon seit einiger Zeit an einer Query rum, aber mir will so langsam nichts mehr einfallen, wie ich das am besten lösen kann:

    DB Tabelle
    |session_start|session_time|session_name|session_logged|
    --------------------------------------------------------------------------------
    timestamp | timestamp | usrname1 | 1 |
    --------------------------------------------------------------------------------
    timestamp | timestamp | usrname2 | 1 |
    --------------------------------------------------------------------------------
    timestamp | timestamp | usrname2 | 1 |
    --------------------------------------------------------------------------------
    timestamp | timestamp | usrname1 | 1 |
    --------------------------------------------------------------------------------
    timestamp | timestamp | gast | 0 |

    Nun die Abfrage :

    $ols_query_4 = "SELECT session_start,session_time, session_name FROM db_tbl";
    $ols_query_4 .= "WHERE session_logged='1' GROUP BY session_name ORDER BY sessiontime ,session_level";

    Hmm, nun das Problem - ich möchte jeweils, wenn ich die Daten nach namen gruppiert hab, das immer der Datensatz (mit dazugehörigem namen) mit der neuesten timestamp (session_time) als wert zurückgegeben wird. Wie stelle ich das an ?

    BSP: usrname2 -> aktuellste session_time von usrname2

    ich hoffe man versteht was ich meine ^^

    mfg
    paddy

  • #2
    Das macht man nicht mit GROUP BY sondern mit LEFT JOIN ... !
    carpe noctem

    [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
    [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

    Kommentar


    • #3
      Hmm, danke für den Tipp, aber ich versteh nicht ganz wie das mit LEFT JOIN funktionieren soll - kannst du mir vielleicht mal nen kleinen Tipp geben, so das man das nachvollziehen kann ?

      Kommentar


      • #4
        benutze die Suche von Forum und suche nach "left join" und "audi" , als Ergebnis wirst du irgendwann eine Antwort von mrhappiness finden, die genau das macht, was du haben willst

        Kommentar


        • #5
          Original geschrieben von asp2php
          benutze die Suche von Forum und suche nach "left join" und "audi" , als Ergebnis wirst du irgendwann eine Antwort von mrhappiness finden, die genau das macht, was du haben willst
          LOL - zufällig fahr ich nen audi und hab die forensuche echt schon öfter gequält deswegen aber bei "left join" und "audi" kemmt nix, was von mrhappiness kommentiert wurde. hmm, ich überleg schon die ganze zeit selber, wie das funktionieren könnte, aber mir fehlt der ansatz.

          Wärst du so lieb und postest mal den link zum betreffenden Beitrag?
          Dat wär subba

          Kommentar


          • #6
            Re: [GROUP BY] bestimmten wert ausgeben

            http://www.php-resource.de/forum/sho...threadid=31056
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              Okay danke, aber so richtig hilft mir die Abfrage von mrhappiness nicht weiter, da ich ja nicht über 2 Tabellen abfrage, sondern nur aus einer Tabelle was auslese. Ich denk mal, die wenigsten leute verstehen, was mrhappiness da gebastelt hat ( ), deshalb komm ich auch nicht weiter wenn ich versuche die Abfrage umzubauen. hmm, ich versteh einfach nicht, wie man mit einer LEFT JOIN Abfrage einen GROUP BY Befehl ersetzen soll bzw. fehlt mir da der Ansatz, wie man das anstellt. hmm, verdammt schwierig...

              Kommentar


              • #8
                Code:
                SELECT 
                  e.*, t.*
                FROM 
                  thema t
                  INNER JOIN eintrag e ON e.id_thema=t.id_thema
                    LEFT JOIN eintrag e_dummy
                    ON 
                      e.id_thema=e_dummy.id_thema
                      AND
                      e.datum<e_dummy.datum
                WHERE
                  e_dummy.id_eintrag IS NULL
                die tabelle, die ich zweimal verwende drin lassen und die andere rausnehmen:
                Code:
                SELECT 
                  e.*
                FROM 
                  eintrag e
                  LEFT JOIN eintrag e_dummy
                   ON 
                    e.id_thema=e_dummy.id_thema
                    AND
                    e.datum<e_dummy.datum
                WHERE
                  e_dummy.id_eintrag IS NULL
                und jetzt noch die spaltennamen anpassen
                Code:
                SELECT 
                  e.*
                FROM 
                  db_tbl e
                  LEFT JOIN db_tpl e_dummy
                   ON 
                    e.session_name=e_dummy.session_name
                    AND
                    e.session_time<e_dummy.session_time
                WHERE
                  e_dummy.session_time IS NULL
                  AND e.logged_in = 1
                so zum beispiel könnte das aussehen
                OffTopic:
                schleimer
                Ich denke, also bin ich. - Einige sind trotzdem...

                Kommentar


                • #9
                  sollte ein simples MAX() bei session_time und ein group by über session_name nicht reichen

                  Kommentar


                  • #10
                    Ich denke, also bin ich. - Einige sind trotzdem...

                    Kommentar


                    • #11
                      Original geschrieben von myfavour
                      sollte ein simples MAX() bei session_time und ein group by über session_name nicht reichen
                      Hmm, am besten liest du nochmal von ganz Vorn. So hab ich nämlich angefangen ^^

                      @mrhappiness: WOW! Also ich steig zwar (noch) nicht durch aber es funktioniert! Hmm, interessant - wie du das gelöst hast.

                      Was bezweckt "...WHERE e_dummy.session_time IS NULL.." bzw. wie muss ich das verstehen ? *verwirrtgugg*

                      Kommentar


                      • #12
                        dieser Thread war gemeint

                        Kommentar


                        • #13
                          Original geschrieben von paddy
                          wie muss ich das verstehen ?
                          Code:
                          SELECT 
                            e.*, e.session_time < e_dummy.session_time, e_dummy.*
                          FROM 
                            db_tbl e
                            LEFT JOIN db_tpl e_dummy
                             ON 
                              e.session_name=e_dummy.session_name
                              AND
                              e.session_time<e_dummy.session_time
                          WHERE
                            e_dummy.session_time IS NULL
                            AND e.logged_in = 1
                          probier's mal aus, das sollte klarheit schaffen
                          Ich denke, also bin ich. - Einige sind trotzdem...

                          Kommentar

                          Lädt...
                          X