Aktuellen preis aus Preistabelle abfragen

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

  • Aktuellen preis aus Preistabelle abfragen

    Hallo,
    ich habe da ein für könner eher kleines Problem.
    Und zwar habe ich eine tabelle t_artikel und eine tabelle t_preise.

    in t_artikel stehen die Artikel mit Artikelnummer (artikelnr) und in t_preise alle preise die ein Artikel bisher hatte also am 5.6.2004 kostete ein artikel 1euro und am 7.4.2004 dann 2euro.

    ich möchte nun in einem Shop den aktuellen Preis anzeigen lassen, aber ich bekomme die SQL-Abfrage nicht hin.

    Ein aktueller Versuch sieht so aus:

    SELECT t_artikel.artikelnr, t_preise.preis1, max( t_preise.datum )
    FROM t_artikel
    RIGHT JOIN t_preise ON t_artikel.artikelnr = t_preise.artikelnr
    WHERE t_artikel.artikelgruppe = "3"
    GROUP BY artikelnr
    ORDER BY datum DESC

    Damit zeigt er mir zwar das letzte datum eines Preises, aber den falschen preis.

    Ich hoffe ihr könnt mir helfen.

    Vielen dank schonmal im voraus

  • #2
    hmm,

    kennst du HAVING?
    ich glaub, das dürfte für solche situationen passen ...
    Zuletzt geändert von derHund; 29.06.2004, 12:30.
    Die Zeit hat ihre Kinder längst gefressen

    Kommentar


    • #3
      ohne garantie ....

      Code:
      SELECT
          a.artikelnr,
          p.preis1,
          p.datum
      FROM
          t_artikel a
              RIGHT JOIN t_preise p ON (a.artikelnr = p.artikelnr)
      WHERE
          a.artikelgruppe = 3
      HAVING
          p.datum = MAX(p.datum)
      GROUP BY
          a.artikelnr
      ORDER BY
          p.datum DESC
      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


      Kommentar


      • #4
        Wann sollte man WHERE einsetzen, wann HAVING ?

        In der Doku ist das ja äusserst kanpp gehalten mit der Erklräung. Wäre nett wenn einer da ein schönes Beispil posten könnte


        An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

        Kommentar


        • #5
          HAVING ist dann gefragt, wenn du mit funktionen arbeiten willst. ;-)

          so mache ich das immer. ansonsten meckert halt mysql von selber, wenn du z.b. MAX() in WHERE verwenden willst. wenn er meckert schubs es in HAVING und gut ist. ;-)

          mal sehen, wer das hoffentlich etwas besser erklären kann ...
          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


          Kommentar


          • #6
            HAVING wird zum Eingrenzen eines Gruppierten Ergebnisses verwendet ... !
            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


            • #7
              hmm,

              Wann sollte man WHERE einsetzen, wann HAVING ?
              das ist nicht wirklich etwas, was man sich aussuchen könnte.
              - Don't use HAVING for items that should be in the WHERE clause.
              - The HAVING clause can refer to aggregate functions, which the WHERE clause cannot:
              mysql.com
              Die Zeit hat ihre Kinder längst gefressen

              Kommentar


              • #8
                Ich würde mal folgenden Lösungsansatz vorschlagen ...
                Code:
                SELECT a.title, p.preis
                  FROM t_artikel a
                 INNER JOIN t_preise p
                    ON a.id = p.id
                  LEFT JOIN t_preise p2
                    ON p.id = p2.id
                   AND p.datum < p2.datum
                 WHERE p2.datum IS NULL
                zumal der von Abraxax eh syntaktisch falsch ist ...

                P.S.: So etwas
                Code:
                HAVING
                    p.datum = MAX(p.datum)
                würde bestenfalls in der WHERE-Clause und mit einer Unterfrage funktionieren ...
                Zuletzt geändert von goth; 29.06.2004, 12:47.
                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


                • #9
                  Original geschrieben von derHund
                  - Don't use HAVING for items that should be in the WHERE clause.
                  - The HAVING clause can refer to aggregate functions, which the WHERE clause cannot:
                  dann lag ich ja mit meine erklärung doch nicht so weit von der realität entfernt.
                  INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                  Kommentar


                  • #10
                    Original geschrieben von goth
                    zumal der von Abraxax eh syntaktisch falsch ist ...
                    1. war das ohne garantie ..

                    und

                    2. gibt es mysql_error()
                    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                    Kommentar


                    • #11
                      Original geschrieben von Abraxax
                      dann lag ich ja mit meine erklärung doch nicht so weit von der realität entfernt.
                      Ich glaube allerdings die meine ist korrekter ... !

                      Original geschrieben von Abraxax
                      1. war das ohne garantie ..

                      und

                      2. gibt es mysql_error()
                      Ich denke Du als SQL-Profi solltest auf den ersten Blick erkennen, dass die Reihenfolge:
                      Code:
                      SELECT
                      FROM
                      WHERE
                      HAVING
                      GROUP BY
                      ORDER BY
                      nicht funktionieren kann ... !
                      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


                      • #12
                        Original geschrieben von goth
                        Ich glaube allerdings die meine ist korrekter ... !
                        wie auch immer ... niemand ist perfekt ...

                        EDIT:
                        @goth
                        ändere nicht immerzu deine posts ...

                        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                        Kommentar


                        • #13
                          Original geschrieben von goth
                          HAVING wird zum Eingrenzen eines Gruppierten Ergebnisses verwendet ... !
                          Eindeutig und Präzise

                          Dass man Aggregatfunktionen nicht in WHERE haben kann wusste ich nicht, wieder was gelernt


                          An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

                          Kommentar


                          • #14
                            Original geschrieben von Abraxax
                            EDIT:
                            @goth
                            ändere nicht immerzu deine posts ...

                            War nur ein Nachtrag ... also nicht wirklich 'ne Änderung ... und zu wenig für einen neuen Post ... !
                            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


                            • #15
                              super,
                              ich wusste doch, das ich ich hier ein paar tipps bekomme, aber das es so schnell geht, dass ich nichtmal mit dem testen hinterher komme
                              Danke dafür!
                              Code:
                              SELECT a.artikelnr, p.preis1
                                FROM t_artikel a
                               INNER JOIN t_preise p
                                  ON a.artikelnr = p.artikelnr
                                LEFT JOIN t_preise p2
                                  ON p.artikelnr = p2.artikelnr
                                 AND p.datum < p2.datum
                               WHERE p2.datum IS NULL
                              Mit dem code bringe ich die CPU vom Server nur zu 100% auslastung.

                              und mit dem HAVING keine Fehlermeldung, aber auch kein ergebnis.

                              Und nu?

                              Kommentar

                              Lädt...
                              X