Ankündigung

Einklappen
Keine Ankündigung bisher.

Ermittlung der Versandkosten nach Gewicht

Einklappen

Neue Werbung 2019

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

  • Ermittlung der Versandkosten nach Gewicht

    Ich m�chte gerne f�r das Gesamtgewicht aller sich im Warenkorb befindlichen Artikel aus einer anderen Tabelle, die die Versandkosten und das dazu passende Gewicht enth�lt die Versandkosten ermitteln.

    Bisher bin ich soweit gekommen:
    PHP-Code:
    <?php
    $checkshipping
    =mysql_fetch_array(mysql_query("select price from shop_shipping_costs where weight between $basket_totalweight and weight "));
    ?>
    Nun gut, es funktioniert zwar, jedoch nicht so ganz wie ich mir das eigentlich vorstelle!


    Nehmen wir mal an, das
    PHP-Code:
    <?php
    $basket_totalweight
    ?>
    = 1.00 ist, dann werden mir als Versandkosten 5.00 EUR ausgegeben. Es m�ssten mir jedoch 4.50 EUR ausgegeben werden?


    Meine Tabelle für die Versandkosten sieht wie folgt aus:

    Code:
    weight | price
    --------------
    0.01   | 4.50
    3.00   | 5.00
    5.00   | 5.50
    8.00   | 6.00
    10.00  | 6.50
    15.00  | 6.50
    20.00  | 7.00
    25.00  | 7.50
    30.00  | 8.00

    Die Spalten weight und price sind jeweils vom Typ decimal.


    Ich hoffe jemand kann mir bei meinem Problem helfen.
    Vielen Dank im Voraus!

  • #2
    Re: Ermittlung der Versandkosten nach Gewicht

    Zitat von ThaRider
    Nehmen wir mal an, das
    PHP-Code:
    <?php
    $basket_totalweight
    ?>
    = 1.00 ist, dann werden mir als Versandkosten 5.00 EUR ausgegeben. Es m�ssten mir jedoch 4.50 EUR ausgegeben werden?[/code]
    Naja, dann ist dein Select
    where weight between 1.00 and weight

    und greift logischerweise in dem Moment wenn die Bedingung
    where weight between 1.00 and 1.00
    erfüllt ist.

    [edit]quatch:
    es werden alle ausgewählt, die grösser/gleich 1.00 sind.
    hier sollte ORDER und LIMIT weiterhelfen
    [/edit]

    Kommentar


    • #3
      Re: Ermittlung der Versandkosten nach Gewicht

      [edit]quatch:
      es werden alle ausgewählt, die grösser/gleich 1.00 sind.
      hier sollte ORDER und LIMIT weiterhelfen
      [/edit]

      Könntest du mir noch ein Beispiel geben, wie dies dann in der Query aussehen müsste?

      Oder kennst du oder jemand anderes im Forum eine bessere/elegantere Lösung dafür?

      Kommentar


      • #4
        Erst mal würde in dein Fall WHERE weight >= 1.00 ausreichen, dann noch ein ORDER auf weight mit einem LIMIT 1, da du ja nur ein Satz haben willst

        WHERE weight >= 1.00 ORDER BY weight LIMIT 1

        Kommentar


        • #5
          Zitat von DiBo33
          Erst mal würde in dein Fall WHERE weight >= 1.00 ausreichen, dann noch ein ORDER auf weight mit einem LIMIT 1, da du ja nur ein Satz haben willst

          WHERE weight >= 1.00 ORDER BY weight LIMIT 1

          Ergibt genau das selbe Ergebnis, nämlich 5.00 EUR, obwohl es 4.50 EUR sein müssten.

          Kommentar


          • #6
            Ergibt genau das selbe Ergebnis, nämlich 5.00 EUR, obwohl es 4.50 EUR sein müssten.
            Lt. deiner Tabelle aber nicht

            weigt 0.01 price 4.50

            und lt. Adam Riese und mir ist 1.00 > 0.01

            Kommentar


            • #7
              Zitat von DiBo33
              Ergibt genau das selbe Ergebnis, nämlich 5.00 EUR, obwohl es 4.50 EUR sein müssten.
              Lt. deiner Tabelle aber nicht

              weigt 0.01 price 4.50

              und lt. Adam Riese und mir ist 1.00 > 0.01

              Das ist wirklich mehr als komisch, aber anscheinend sehen wohl wir beide den Wald vor lauter Bäumen nicht.

              Also hier nochmal meine Abfrage:
              PHP-Code:
              <?php
              $checkshipping
              =mysql_fetch_array(mysql_query("select price from shop_shipping_costs where weight >= '$basket[3]' order by weight "));
              ?>
              Bei einem Gewicht von 4.00 kg bekomme ich momentan Versandkosten von 5.50 EUR angezeigt, es sollten jedoch lt. meiner Tabelle 5.00 EUR sein.
              Irgendwo steckt da der Wurm drin, vielleicht hab ich ja auch einen Designfehler in der Tabelle?

              Kommentar


              • #8
                Dann extrahiere deine Gesamtabfrage in einzelne Schritte und erstelle entsprechende Debuggingausgaben, ob denn wirklich auch die erwartende Werte gegeben sind.

                Kommentar


                • #9
                  Zitat von DiBo33
                  Dann extrahiere deine Gesamtabfrage in einzelne Schritte und erstelle entsprechende Debuggingausgaben, ob denn wirklich auch die erwartende Werte gegeben sind.

                  Bringt wohl auch nichts, denn:
                  ----------------------------------
                  Code:
                  select price from shop_shipping_costs where weight >= '1.00'
                  ist wohl korrekt.

                  Es werden mir dennoch 5.00 EUR anstatt 4.50 EUR angezeigt.

                  Hat denn keiner eine Idee, wie man es besser lösen könnte?

                  Kommentar


                  • #10
                    Evtl. könntest Du ja mit einer kleinen Redundanz leben und einfach pro Zeile die Unter- und Obergrenze eintragen.
                    Dann trifft sicher nur eine Zeile zu oder gar keine wenn das Paket zu schwer ist.
                    **********************************
                    Nein, ich bin nicht die Signatur.
                    Ich putze hier nur.
                    **********************************

                    Kommentar


                    • #11
                      Zitat von DiBo33
                      Dann extrahiere deine Gesamtabfrage in einzelne Schritte und erstelle entsprechende Debuggingausgaben, ob denn wirklich auch die erwartende Werte gegeben sind.
                      Habs jetzt endlich raus!
                      Musste meine Tabelle um ein paar Werte erweitern, aber Hauptsache es funktioniert nun.


                      Meine MySql-Tabelle jetzt:
                      ------------------------------

                      weight | price
                      ---------------
                      0.01 | 4.50
                      2.99 | 4.50
                      3.00 | 5.00
                      4.99 | 5.00
                      5.00 | 5.50
                      7.99 | 5.50
                      8.00 | 6.00
                      9.99 | 6.00
                      10.00 | 6.50
                      14.99 | 6.50
                      15.00 | 6.50
                      19.99 | 6.50
                      20.00 | 7.00
                      24.99 | 7.00
                      25.00 | 7.50
                      29.99 | 7.50
                      30.00 | 8.00

                      Kommentar


                      • #12
                        Zitat von ThaRider
                        Zitat von DiBo33
                        Dann extrahiere deine Gesamtabfrage in einzelne Schritte und erstelle entsprechende Debuggingausgaben, ob denn wirklich auch die erwartende Werte gegeben sind.

                        Bringt wohl auch nichts, denn:
                        ----------------------------------
                        Code:
                        select price from shop_shipping_costs where weight >= '1.00'
                        ist wohl korrekt.

                        Es werden mir dennoch 5.00 EUR anstatt 4.50 EUR angezeigt.

                        Hat denn keiner eine Idee, wie man es besser lösen könnte?
                        Das sind IMMER noch >0.01 !!!!!

                        so langsam fühle ich mich vera****

                        Kommentar


                        • #13
                          1.0 > 0.01 && < 2.99

                          Kommentar


                          • #14
                            Zitat von DiBo33
                            Das sind IMMER noch >0.01 !!!!!

                            so langsam fühle ich mich vera****

                            Wieso denn das?

                            Kann doch nun auch nichts dafür, das es jetzt mit der erweiterten Tabelle funktioniert und vorher nicht funktioniert hat!

                            Irgendwie scheint wohl die Logik von MySql nen Schlag zu haben !!!

                            Anders kann ich mir das auch nicht erklären.

                            Kommentar


                            • #15
                              Irgendwie scheint wohl die Logik von MySql nen Schlag zu haben !!!
                              Nein, deine.
                              Aalso von vorne.

                              select price from shop_shipping_costs where weight >= '1.00'

                              heisst, der erste Datensatz dessen Bedingung zutrifft ist weight = 3.00
                              3.00 ist grösser/gleich 1.00
                              0.01 ist ist nicht grösser/gleich sondern kleiner als 1.00 somit trifft die Bedingung nicht zu!

                              setze den Wert 0.01 in der Tabelle (wie sie vorher war) auf 0.00 und den letzten mindestens auf den maximal möglichen, dann lautet deine Bedingung

                              WHERE weight <= Wert ORDER BY weight DESC LIMIT 1

                              das ORDER BY ist dann nötig, da du sonnst immer den ersten price bekommst.

                              [edit]nicht <= sondern <[/edit]

                              Kommentar

                              Lädt...
                              X