min(datum) Abfrage

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

  • min(datum) Abfrage

    Guten Tag,

    ich habe ein Problem mit einer scheinbar einfachen Abfrage, die sich allerdings nach endlosem Probieren und Überlegen meinerseits doch als für mich unlösbar herausstellte.

    Folgene Situation liegt vor:

    Es geht um ein Meldungssystem, das jede Änderung an einer Meldung ('meldung_id') von einem User ('user_id') protokolliert (mit dem dazugehörigen Datum ('datum_akt').
    Die Tabelle heisst 'user_b_meldung'.
    PHP-Code:
    +------------+---------+---------------------+
    meldung_id user_id datum_akt           |
    +------------+---------+---------------------+
    |          
    |       2004-08-18 11:02:58 |
    |          
    |       2004-08-19 13:23:07 |
    |          
    |       2004-08-19 13:32:19 |
    |          
    |       2004-08-18 11:03:31 |
    |          
    |       2004-08-19 13:44:36 |
    |          
    |       2004-08-19 13:45:10 |
    |          
    |       2004-08-19 13:45:25 |
    |          
    |       2004-08-18 14:22:27 |
    |          
    |       2004-08-18 11:07:00 |
    |          
    |       2004-08-18 13:34:19 |
    |          
    |       2004-08-18 11:08:09 |
    |          
    |       2004-08-18 14:25:10 |
    |          
    |       2004-08-18 14:26:59 |
    |          
    |       2004-08-19 13:13:51 |
    |          
    |       2004-08-19 13:30:54 |
    |         
    10 |       2004-08-19 14:47:31 |
    |         
    10 |       2004-08-19 14:44:53 |
    |         
    11 |       2004-08-19 15:23:59 |
    |         
    11 |       2004-08-19 15:23:43 |
    |         
    11 |       2004-08-19 15:24:27 |
    +------------+---------+---------------------+ 
    Nun möchte ich abfragen, wer zuerst die jeweilige Meldung geändert hat. Das Resultat müsste dann wie folgt aussehen:

    PHP-Code:
    +------------+---------+---------------------+
    meldung_id user_id datum_akt           |
    +------------+---------+---------------------+
    |          
    |       2004-08-18 11:02:58 |
    |          
    |       2004-08-18 11:03:31 |
    |          
    |       2004-08-18 11:07:00 |
    |          
    |       2004-08-18 11:08:09 |
    |          
    |       2004-08-18 14:25:10 |
    |          
    |       2004-08-19 13:13:51 |
    |          
    |       2004-08-19 13:30:54 |
    |         
    10 |       2004-08-19 14:44:53 |
    |         
    11 |       2004-08-19 15:23:43 |
    +------------+---------+---------------------+ 
    Klingt einfach oder? Dachte ich mir auch und so habe ich diese Abfrage gebastelt (die, im Voraus bemerkt, zwar das richtige Datum liefert, aber falschen User liefert):

    Code:
    SELECT meldung_id, 
              user_id, 
              min(datum_akt)
    FROM user_b_meldung
    GROUP BY meldung_id
    Sicherlich könnt ihr mir weiterhelfen.

  • #2
    schau dir mal http://www.php-resource.de/forum/sho...threadid=31056 an

    alternativ müsstest du mit einer abfrage die erste änderung an einer meldung erfragen (ohne user_id) und mit einer zweiten abfrage dann denn user zu der jetzt bekannten meldung nebst bekanntem ersten datum


    oder du installierst dir mysql 4.1 und nimmst ein subselect
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      Denke jetzt bitte nicht, dass ich zu faul bin meine Birne selber anzustrengen, allerdings bringt mich dein Verweis nicht weiter, da ich ja keine Joins benutze. MySQL 4.1 habe ich übrigens installiert, jedoch fällt mir keine sinnvolle Möglichkeit ein, SubQuerys an dieser Stelle zu nutzen.

      Ich hab übrigens die Abfrage ein wenig modifiziert und sie liefert auch die richtigen Werte, jedoch vernachlässigt er genau 2 Zeilen in der Lösungsmenge, nämlich meldung_id 10 & 11... warum? Keine Ahnung.

      Code:
      SELECT user_id, meldung_id, datum_akt
      FROM user_b_meldung
      GROUP BY meldung_id
      HAVING datum_akt = min(datum_akt)

      Kommentar


      • #4
        Original geschrieben von miguel_rkc
        allerdings bringt mich dein Verweis nicht weiter, da ich ja keine Joins benutze.
        "oh, sie haben sich ein bein gebrochen, soll ich ihnen einen krankenwagen rufen?"

        - "nein, ein krankenwagen bringt mich nicht weiter, weil ich keinen führerschein habe ..."


        (vielleicht solltest du es mal mit joins versuchen, weil es damit am besten geht ...?)
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Du hättest mir gleich dazu schreiben sollen, wie ich in einer Tabelle Joins anwende... ich bin gespannt

          Naja, ich werd mich morgen nochmal auf Arbeit ransetzen, jedoch bin ich weiterhin für konstruktive Hilfe offen.

          mfg & n8

          Kommentar


          • #6
            Original geschrieben von miguel_rkc
            Du hättest mir gleich dazu schreiben sollen, wie ich in einer Tabelle Joins anwende... ich bin gespannt
            nicht unbedingt was zur Lösung deines Problem, aber zur Klärung deiner Frage, du unwissende :
            http://www.php-resource.de/forum/sho...854#post279854

            Kommentar


            • #7
              Ok, wieder etwas dazu gelernt - was mir aber leider auch nicht weiterhilft

              Kommentar


              • #8
                sollte es aber, wie sieht denn deine neu dazugelernte abfrage aus?
                Ich denke, also bin ich. - Einige sind trotzdem...

                Kommentar


                • #9
                  So, it's done.

                  PHP-Code:
                  SELECT  u.meldung_id
                          
                  u.user_id
                          
                  u.datum_akt
                  FROM user_b_meldung 
                  AS u
                          LEFT  JOIN user_b_meldung 
                  AS u2 ON 
                            u
                  .meldung_id u2.meldung_id 
                          
                  AND u.datum_akt u2.datum_akt
                  WHERE u2
                  .meldung_id IS  NULL 
                  Die Abfrage entzieht sich zwar meiner Meinung nach jeglicher simpler Logik, aber sie funktioniert - danke für den Verweis.
                  Zuletzt geändert von mrhappiness; 20.08.2004, 10:50.

                  Kommentar


                  • #10
                    wenn du nicht viele einträge in der tabelle hast, dann nimm das WHERE mal raus und lass dir u2 noch ausgeben
                    Code:
                    SELECT  
                      u.meldung_id, u.user_id, u.datum_akt,
                      u2.meldung_id, u2.user_id, u2.datum_akt
                    FROM user_b_meldung AS u
                            LEFT  JOIN user_b_meldung AS u2 ON
                             u.meldung_id = u2.meldung_id AND 
                             u.datum_akt > u2.datum_akt
                    das sollte beim verständnis helfen
                    Ich denke, also bin ich. - Einige sind trotzdem...

                    Kommentar

                    Lädt...
                    X