neueste Datensätze innerhalb zwei Tabellen

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

  • neueste Datensätze innerhalb zwei Tabellen

    Hallo,

    ich habe eine Tabelle "bestellungen" in der folgende Felder vorhanden sind:

    id
    userid
    bestell_nr
    zeit

    die zweite Tabelle "bestellungen_rel" beschreibt welche Artikel zu den einzelnen Bestellungen gehören. Diese sieht dann so aus:

    id
    bestellung_id //bezieht sich auf bestellungen.id
    artikel_id
    anzahl //Anzahl von artikel_id

    nun ist es gut möglich, daß ein User zwei Bestellungen in der Tabelle "bestellungen" hat, die sich nur in "zeit" unterscheiden.

    Wie mache ich es nun, daß ich mit einem Query die zwei Tabellen auslese, und dabei nur die Daten der neuesten Bestellung erhalte. Ich hatte mir sowas in der Art gedacht:

    SELECT bestellungen . * , bestellungen_rel . *
    FROM bestellungen, bestellungen_rel
    WHERE bestellungen.userid =8 && bestellungen.id = bestellungen_rel.bestellung_id
    && bestellungen.zeit = max (zeit)

    Mit der letzten Zeile dachte ich eigentlich daß es hinhauen sollte, denn es klingt doch logisch wenn ich nur die Datensätze mit dem höchsten "zeit"-Wert, also max (zeit) anzeige. Aber leider macht da mysql nicht mit....hmmm

  • #2
    http://www.php-resource.de/forum/sho...threadid=28292
    [color=blue]MfG Payne_of_Death[/color]

    [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
    [color=red]Merke:[/color]
    [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

    Murphy`s Importanst LAWS
    Jede Lösung bringt nur neue Probleme
    Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
    In jedem kleinen Problem steckt ein großes, das gern raus moechte.

    Kommentar


    • #3
      bringt mich leider auch nicht weiter. Verrat mir doch wenigstens bitte welcher von den Statements mein Problem lösen könnte.

      Kommentar


      • #4
        left join sollte reichen.

        Kommentar


        • #5
          hmm, hab mir jetzt den Kopf darüber zerbrochen, und immer noch keine Lösung gefunden. Ich hab mir das mit den Joins gut durchgelesen, und meinen Query darauf umgemünzt. Sieht jetzt so aus:

          //die Tabellen heißen jetzt orders und orders_rel

          SELECT orders.id, orders.userid, orders.bestell_nr, orders.zeit, orders_rel. *
          FROM orders
          LEFT JOIN orders_rel ON orders.id = orders_rel.order_id && userid =187

          damit zeigt er mir immer noch alle Datensätze eines bestimmten Users. Ich möchte aber wie gesagt nur die Datensätze mit dem höchsten Datum.

          Würde ich nur die Tabelle orders abfragen, dann würde ich es folgendermaßen machen:

          SELECT * from orders where userid=187 order by zeit limit 0, 1

          damit krieg ich halt nur die neueste Bestellung, doch wenn ich ein JOIN mit orders_rel brauche, dann kann ich ja nicht limit 0, 1 anwenden, da er mir auch aus orders_rel nur einen Datensatz anzeigen würde.

          Meinen SQL-Kenntnissen nach müßte es so gehen:

          //max(zeit) ist hinzugefügt
          SELECT orders.id, orders.userid, orders.bestell_nr, orders.zeit, orders_rel. *
          FROM orders
          LEFT JOIN orders_rel ON orders.id = orders_rel.order_id && userid =187 && zeit=max(zeit)

          aber da macht das max(zeit) leider nicht mit.

          Kommentar


          • #6
            zunächst mal lass dir gesagt sein, dass in die on-clause nur verknüpfungsbedingungen reingehören (so stehts im manual). alle anderen gehören natürlich ins where-statement.

            Kommentar


            • #7
              ok, dann halt so:

              SELECT orders.id, orders.userid, orders.bestell_nr, orders.zeit, orders_rel. *
              FROM orders
              LEFT JOIN orders_rel ON orders.id = orders_rel.order_id
              where userid =187

              Kommentar


              • #8
                Bei längeren Abfragen wäre sowas vorteilhaft:

                Code:
                SELECT 
                  B.bubu_id,
                  B.bubu_name
                  FROM
                   BLUBB B
                [color=blue]MfG Payne_of_Death[/color]

                [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
                [color=red]Merke:[/color]
                [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

                Murphy`s Importanst LAWS
                Jede Lösung bringt nur neue Probleme
                Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
                In jedem kleinen Problem steckt ein großes, das gern raus moechte.

                Kommentar


                • #9
                  danke, aber löst leider dennoch nicht mein Problem

                  Kommentar


                  • #10
                    Original geschrieben von Nube2021
                    danke, aber löst leider dennoch nicht mein Problem
                    Gewünschte Ergebnismenge falsch?

                    Oder Syntax Problem?

                    Sprich mit uns
                    [color=blue]MfG Payne_of_Death[/color]

                    [color=red]Manual(s):[/color] <-| PHP | MySQL | SELFHTML |->
                    [color=red]Merke:[/color]
                    [color=blue]Du brauchst das Rad nicht neu erfinden ! [/color]<-ForumSuche rettet Leben-> || <-Schau in den Codeschnippsels->

                    Murphy`s Importanst LAWS
                    Jede Lösung bringt nur neue Probleme
                    Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht.
                    In jedem kleinen Problem steckt ein großes, das gern raus moechte.

                    Kommentar


                    • #11
                      Syntaxproblem. Ich will ja nur die Datensätze mit der aktuellsten Zeit, daher dachte ich mir daß ich max(zeit) benutzen könnte, doch dann meldet SQL, daß man das nicht benutzen darf wenn kein Group by dabei ist...

                      Kommentar


                      • #12
                        Dann benutze doch einfach ein group by
                        h.a.n.d.
                        Schmalle

                        http://impressed.by
                        http://blog.schmalenberger.it



                        Wichtige Anmerkung: Ich habe keine Probleme mit Alkohol ...
                        ... nur ohne :-)

                        Kommentar


                        • #13
                          dann krieg ich nicht das gewünschte Ergebnis, probierts einfach selber aus, dann versteht ihr die Problematik...

                          Kommentar

                          Lädt...
                          X