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

  • ThaRider
    hat ein Thema erstellt Ermittlung der Versandkosten nach Gewicht.

    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!

  • DiBo33
    antwortet
    Mit meiner Vorgehensweise kriegt man diese Info ja.
    Ich würde auch nie das Gegenteil behaupten, sehe es eher als Ergänzung zu deinen Ausführungen.

    Einen Kommentar schreiben:


  • ThaRider
    antwortet
    Zitat von Der_Gerhard
    Mit meiner Vorgehensweise kriegt man diese Info ja.
    Wenn man am Ende alle Artikel eingepackt hat, braucht man ja nur zu zählen, wieviele Pakete es geworden sind.
    Das Verfahren ist sicher nicht optimal, dürfte aber relativ leicht zu implementieren sein.

    Für das Verpackungsgewicht kann man einfach von den max. 30kg etwas abziehen.

    Wenn die ermittelte Aufteilung auf Pakete dann auch gleich dem Packauftrag beigefügt wird, stimmt das Ergebnis garantiert mit den tatsächlich ausgelieferten Paketen überein.
    Ist mir soweit alles schon klar und vollkommen nachvollziehbar.
    Mein Problem besteht jedoch in der Realisierung einer solchen Funktion, da ich dafür einfach nicht die notwendigen Kenntnisse habe.

    Einen Kommentar schreiben:


  • Der_Gerhard
    antwortet
    Mit meiner Vorgehensweise kriegt man diese Info ja.
    Wenn man am Ende alle Artikel eingepackt hat, braucht man ja nur zu zählen, wieviele Pakete es geworden sind.
    Das Verfahren ist sicher nicht optimal, dürfte aber relativ leicht zu implementieren sein.

    Für das Verpackungsgewicht kann man einfach von den max. 30kg etwas abziehen.

    Wenn die ermittelte Aufteilung auf Pakete dann auch gleich dem Packauftrag beigefügt wird, stimmt das Ergebnis garantiert mit den tatsächlich ausgelieferten Paketen überein.

    Einen Kommentar schreiben:


  • DiBo33
    antwortet
    Mal ein wenig Theorie.

    Du hast ja im Prinzip alle existenten Artikel in einer Tabelle aufgelistet, hier werden dan auch die entsprechende Gewichte mit gespeichert.

    In der Bestell-Tabelle hast du die einzelnen Artikel nebst Anzahl.

    Jetzt benötigst du ein entsprechenden Algorithmus, welcher dir aus den gegebenen Informationen die Anzahl der Pakete tatsächlich errechnet.

    Bei der ganzen Berechnung darfst du natürlich das Verpackungsgewicht nicht ausser acht lassen.

    Einen Kommentar schreiben:


  • ThaRider
    antwortet
    Zitat von Der_Gerhard
    Wenn Du nicht weißt, was tatsächlich in ein Paket passt, weißt Du auch nicht, wieviele Pakete Du brauchst!
    Es ist mir durchaus klar, das wenn jemand 3 Artikel zu je 17 kg bestellt, es dann nicht 2 sondern in Wirklichkeit 3 Pakete sind. Doch habe ich für solch komplexe Aufgaben nicht das nötige wissen in PHP oder anderen Scriptsprachen.

    Also was soll ich machen?
    1. Ich gebe mich nun mit dieser, ungenauen, Möglichkeit zufrieden und weise die Kunden darauf hin, das bei mehreren Hochgewichtigen Artikeln die angezeigten Versandkosten nur ungefähr stimmen.
    2. Ich lasse mir soetwas für teuer Geld von einem Profi basteln.
    3. Ich warte ab, bis ich vielleicht soetwas irgendwo mal finde, eher unwahrscheinlich.

    Einen Kommentar schreiben:


  • Der_Gerhard
    antwortet
    Wenn Du nicht weißt, was tatsächlich in ein Paket passt, weißt Du auch nicht, wieviele Pakete Du brauchst!

    Einen Kommentar schreiben:


  • ThaRider
    antwortet
    Ich danke dir vielmals für deine wirklich sehr gute Arbeit.
    Das ist eigentlich genau das, was ich gesucht habe.

    Einen Kommentar schreiben:


  • ThaRider
    antwortet
    Zitat von DiBo33
    Was ist hier jetzt der entscheidende Unterschied zum ersten Code?
    Gebe mal in $ges_weight ein Wert welcher direkt durch $max_weight teilbar ist ein.
    Okay, dann ist das Gewicht des Pakets 0,00 kg.

    Einen Kommentar schreiben:


  • DiBo33
    antwortet
    Was ist hier jetzt der entscheidende Unterschied zum ersten Code?
    Gebe mal in $ges_weight ein Wert welcher direkt durch $max_weight teilbar ist ein.

    Einen Kommentar schreiben:


  • ThaRider
    antwortet
    Zitat von DiBo33
    Wenns dir wirlich egal ist

    PHP-Code:
    <?php
    $max_weight 
    30;
    $ges_weight 61;
    $anz_pakete ceil($ges_weight/$max_weight);
    $rest = ($ges_weight%$max_weight)?$ges_weight%$max_weight:$max_weight;
    $pakete = array();
    for (
    $i=0$i<$anz_pakete-1$i++) $pakete[$i]=$max_weight;
    $pakete[$anz_pakete-1]=$rest;
    print_r($pakete);
    ?>
    [edit]kleine Korrektur[/edit]

    Mit deinem zuerst geposteten Code gings auch. Was ist hier jetzt der entscheidende Unterschied zum ersten Code?

    So sieht das ganze nun bei mir aus:
    PHP-Code:
    <?php
    // Ausrechnen der Paketanzahl und des Gewichts pro Paket
    $max_weight 30;
    $ges_weight 69;
    $anz_pakete ceil($ges_weight/$max_weight);
    $pakete = array();
    for (
    $i=1$i<=$anz_pakete$i++) $pakete[$i]=$max_weight;
    $pakete[$anz_pakete]=$ges_weight%$max_weight;
    print_r($pakete);
    print 
    '

    '
    ;
    //Je nach Paketanzahl 1 Zeile pro Paket ausgeben und vorher die entsprechenden Versandkosten aus der Datenbank holen
    for($i=1;$i<=$anz_pakete;$i++)
    {
    $shipping=mysql_fetch_array(mysql_query("select price from shop_shipping_costs where weight <= '$pakete[$i]' order by weight desc limit 1"));
    print 
    'Paket '.$i.' :  ( '.$pakete[$i].' kg )  =  '.$shipping[0].' EUR
    '
    ;
    }
    ?>
    für Verbesserungsvorschläge bin ich offen

    Einen Kommentar schreiben:


  • DiBo33
    antwortet
    Wenns dir wirlich egal ist

    PHP-Code:
    <?php
    $max_weight 
    30;
    $ges_weight 61;
    $anz_pakete ceil($ges_weight/$max_weight);
    $rest = ($ges_weight%$max_weight)?$ges_weight%$max_weight:$max_weight;
    $pakete = array();
    for (
    $i=0$i<$anz_pakete-1$i++) $pakete[$i]=$max_weight;
    $pakete[$anz_pakete-1]=$rest;
    print_r($pakete);
    ?>
    [edit]kleine Korrektur[/edit]

    Einen Kommentar schreiben:


  • ThaRider
    antwortet
    Hätte da nochmal eine Frage dazu. Und zwar nehmen wir mal an, es soll nicht wirklich passend gemacht werden, sondern nur die anzahl der benötigten Pakete und dazu das Gewicht für jedes Paket ermittelt werden, dann müsste dies doch einfacher zu lösen sein, oder nicht?


    Beispiel:
    ----------
    Code:
    Gesamtgewicht aller Artikel = 61 kg
    max. Gewicht pro Paket = 30 kg
    
    Und nun einfach die Pakete und das dazugehörige Gewicht ausgeben, in diesem Fall dann also 3 Pakete.
    Paket 1 = 30kg
    Paket 2 = 30kg
    Paket 3 = 1kg

    Einen Kommentar schreiben:


  • ThaRider
    antwortet
    Zitat von Der_Gerhard
    Zitat von ThaRider
    Eine einfachere Lösung gibt es ganz sicher nicht?
    Wenn Du eine findest, kannst Du sie uns ja mitteilen.

    Das Problem ähnelt dem bei der dynamischen Speicherverwaltung: Verschieden große Blöcke sollen optimal im Speicher angelegt werden. Ein eindeutig bestes Verfahren dazu ist mir nicht bekannt. Alle haben irgendwelche Schwächen.

    Es gibt auch eine Ähnlichkeit zum sog. Rucksackproblem, auf dessen Basis früher einmal ein Verschlüsselungsverfahren entwickelt wurde.

    Daher würde ich mir jetzt keine allzu große Hoffnung machen, eine wirklich triviale und einfache Lösung zu finden.

    Ich hab mich aber schon sehr lange nicht mehr mit solchem Zeugs beschäftigt. Vielleicht übersehe ich ja ein wichtiges Detail, das die Sache einfacher werden lässt.
    Könntest du mir denn auch vielleicht ein Beispiel geben, wie dann ein solches Array aufgebaut sein müsste? Das wäre wirklich sehr nett von dir!

    Einen Kommentar schreiben:


  • Der_Gerhard
    antwortet
    Zitat von ThaRider
    Eine einfachere Lösung gibt es ganz sicher nicht?
    Wenn Du eine findest, kannst Du sie uns ja mitteilen.

    Das Problem ähnelt dem bei der dynamischen Speicherverwaltung: Verschieden große Blöcke sollen optimal im Speicher angelegt werden. Ein eindeutig bestes Verfahren dazu ist mir nicht bekannt. Alle haben irgendwelche Schwächen.

    Es gibt auch eine Ähnlichkeit zum sog. Rucksackproblem, auf dessen Basis früher einmal ein Verschlüsselungsverfahren entwickelt wurde.

    Daher würde ich mir jetzt keine allzu große Hoffnung machen, eine wirklich triviale und einfache Lösung zu finden.

    Ich hab mich aber schon sehr lange nicht mehr mit solchem Zeugs beschäftigt. Vielleicht übersehe ich ja ein wichtiges Detail, das die Sache einfacher werden lässt.

    Einen Kommentar schreiben:

Lädt...
X