[MySQL 3.23.X] Tabellenverknüpfung

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

  • [MySQL 3.23.X] Tabellenverknüpfung

    Hallo zusammen.

    Ich weiss es gibt einen thread mit Erklärungen zu joins, aber leider ist nichts passendes dabei..

    Ich habe 2 Tabellen

    file und file_rev

    Felder:
    file -> name, description, size
    file_rev -> name, date, rev

    Datenbeispiel.

    file -> abc.tar.gz, Beschreibung, 1234

    file_rev -> abc.tar.gz, 07.03.04, 0.1
    file_rev -> abc.tar.gz, 08.03.04, 0.2

    Ich möchte nun über eine SQL abfrage folgendes Resultat erhalten.

    abc.tar.gz, Beschreibung, 1234, 0.2 <- NEUSTE Revision (anhand des Datums)

    max(date) habe ich nirgendwo sinnvoll unterbringen können.

    Kann mir da jemand helfen ?

  • #2
    order by

    Kommentar


    • #3
      SELECT f.name, f.description, f.size, r.rev
      FROM `file` AS f, `file_rev` AS r
      WHERE f.name = r.name
      ORDER BY r.rev DESC
      LIMIT 0 , 1

      Is scho in Ordnung aber nur für einen Datensatz.
      in den tabellen stehen mehrere zeilen, und ich brauch alle Daten in einem result.

      Kommentar


      • #4
        Original geschrieben von TheTiggA
        Is scho in Ordnung aber nur für einen Datensatz.
        sollte dich nicht allzu sehr verwundern, wenn du LIMIT 0 , 1 mit reinschreibst.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Verwundert mich auch nicht. Ich sagte ja, für einen Datensatz ok.
          Wenn ich Limit rauslasse stehen alte Revisionen mit in dem Result und die kann ich nichtz gebrauchen....

          Kommentar


          • #6
            Code:
            SELECT 
              f.*, r.*
            FROM 
              file f
              INNER JOIN file_ref r ON f.name = r.name
                LEFT JOIN file_ref r_dummy
                ON 
                  r.name = r_dummy.name
                  AND
                  r.date < r_dummy.date
            WHERE
              r_dummy.name IS NULL
            probier das mal
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              Das sieht brauchbar aus, danke

              (jetz sollte ich das nur noch verstehen)

              Kommentar


              • #8
                wo hängt's denn?
                Ich denke, also bin ich. - Einige sind trotzdem...

                Kommentar


                • #9
                  dafür gibts ja das manual.

                  BTW: order by macht nicht mehr als der name sagt

                  Kommentar


                  • #10
                    Ich verstehe den Syntax schon, nur weiß ich nichts mit dem dummy anzufangen.

                    Kommentar


                    • #11
                      du willst ja aus der tabelle file_ref den höchsten eintrag je name, daher den left join mit name

                      r.date < r_dummy.date sucht dir die eintrage aus file_ref, zu denen es ein größeres datum gibt, gibt es kein größeres wird durch den left join für r_dummy NULL geliefert

                      das anschließende WHERE r_dummy.name IS NULL schränkt das ergebnis dann wieder auf eben diese größten werte ein
                      Ich denke, also bin ich. - Einige sind trotzdem...

                      Kommentar


                      • #12
                        *klick*

                        Jetz hats gefunkt... Danke !!!

                        Kommentar

                        Lädt...
                        X