Kloeppy Posted January 26, 2009 Report Share Posted January 26, 2009 Hallo, wie schon in diesem Forum nachzulesen war kann man mit update products set products_price=products_price+(products_price*.5);[/PHP] die Preise in mysql um 5 % erhöhen. Kann man diesen Befehl zu modifizieren, dass die Preise zusätzlich gerundet werden, nämlich von 297,58 € auf 298 € o.ä. oder gibt dies mysql nicht her. Vielen Dank im voraus. Link to comment Share on other sites More sharing options...
hubbabubba Posted January 27, 2009 Report Share Posted January 27, 2009 Dein Beispiel erhöht die Preise nicht um 5% sondern um 50%. Was du suchst ist funktion "round" update products set products_price=round(products_price*1.05); siehe http://dev.mysql.com/doc/refman/4.1/en/mathematical-functions.html#function_round mfg Link to comment Share on other sites More sharing options...
Kloeppy Posted January 27, 2009 Author Report Share Posted January 27, 2009 Super. Danke. Nun hab ich aber eine Kleinigkeit übersehen. Wenn ich die Preise mit dem Befehl ändere bekomme ich in der Tabelle natürlich nur die abgerundeten Preise ohne MwSt. Daher müsste der Befehl so aussehen, dass die Preise nach Aufschlag von 19 % abgerundet sind. Ist sowas möglich ? Ich befürchte, dass ist dann wohl doch zu kompliziert, oder ? Link to comment Share on other sites More sharing options...
buddy_67 Posted January 30, 2009 Report Share Posted January 30, 2009 Super. Danke. Nun hab ich aber eine Kleinigkeit übersehen. Wenn ich die Preise mit dem Befehl ändere bekomme ich in der Tabelle natürlich nur die abgerundeten Preise ohne MwSt. Daher müsste der Befehl so aussehen, dass die Preise nach Aufschlag von 19 % abgerundet sind. Ist sowas möglich ? Ich befürchte, dass ist dann wohl doch zu kompliziert, oder ? klar geht das. in der xt-db stehen die preise ohne mwst.. also: erstmal auf die preise in der db 19% märchensteuer drauf, dann hast du deine vk-preise in der db inkl. mwst. dann deine 5% aufschlag auf den vk draufbasteln, jetzt hast du deinen erhöhten vk in der db allerdings noch mit mwst. dann eben wieder 19% runter und du hast den um 5% erhöhten vk ohne mwst in der db, so wie du es wolltest... wenn du sowas öfter machst (mehr als zweimal ), schreib dir doch ein kleines php-script, was das ganze berechnet und die richtigen preise die du willst per knopfdruck in deine xt-datenbank schreibt... cu buddy Link to comment Share on other sites More sharing options...
Kloeppy Posted February 3, 2009 Author Report Share Posted February 3, 2009 Hallo, leider funktioniert die Round-Funktion nicht so wie beschrieben...Wenn ich den Befehl update products set products_price=round(products_price*1.05); ausführe werden alle Preise trotzdem krumm dargestellt z.B. 346,37 € statt wie ich es wollte 346,50 €. Dafür bin ich aber schon einen Schritt bezgl. der MwSt. weiter...Musste ersteinmal schauen, wie ich wieder den auf den Anfangswert zurückkomme, wenn ich einmal alle Preise um 19 % erhöht habe. Meine mathematischen Berechnungen haben folgendes ergeben: Mehrwertsteuer drauf: update products set products_price=products_price+(products_price*0.19); Mehrwertsteuer wieder runter: update products set products_price=products_price+(products_price/1.19-products_price) @buddy_67: Sorry, aber ein php-script kann ich nicht schreiben, da ich davon null Ahnung habe Link to comment Share on other sites More sharing options...
hubbabubba Posted February 3, 2009 Report Share Posted February 3, 2009 products_price ist stets ohne UST. Wenn du das so aufrechnest musst du den Shop anschl. mit 0% MWST konfigurieren um im Laden den Preis zu erhalten welchen du in der DB errechnet hat. Dann gehen dir allerdings auch die automatischen Anzeigen flöten welche gesetzlich vorgeschrieben sind (Anzeige UST in Preisangabe) was wiederum weitere Maßnahmen erforderlich macht das zu korrigieren. mfg Link to comment Share on other sites More sharing options...
buddy_67 Posted February 3, 2009 Report Share Posted February 3, 2009 hei, wie hubbabubba sagt: die preisangaben in der xt-db sind OHNE mwst, damit du im shop einen "glatten" preis hast, wirst du mit den "krummen" zahlen in der db leben müssen. beispiel: im shop soll der preis 350.- (inkl. mwst) erscheinen, dann muss in der db (350/119)*100, also 294,1176 eingetragen sein... jetzt willst du deinen preis im shop um 10% auf 385 euro erhöhen, dann muss in der db stehen: (294,1176*110)/100 also 323,5293 im shop wird dann stehen: (323,5293*119)/100 also 385.- so weit so klar du willst deine preise in der db so ändern, dass nach dem aufschlag von 19% "glatte" werte herauskommen, die dann im shop als vk erscheinen...richtig? dabei hilft dir aber die round-funktion von mysql nicht und du kannst mit mysql auch nichts berechnen lassen, was du aber müsstest. wenn ich richtig verstanden hab was du möchtest, kann ich dir eventuell mit einem kleinen script weiterhelfen das ich mal für meine db geschrieben habe. falls interesse bitte pn. ciao buddy Link to comment Share on other sites More sharing options...
reinhardt Posted February 5, 2009 Report Share Posted February 5, 2009 ups, wo ist das Problem? update products set products_price=round(products_price*1.05*1.19)/1.19; oder erst mal mit einem Select testen: select round(products_price*1.05*1.19)/1.19 from products; ggf. noch eine entsprechende where Bedingung dran gefügt. Vorher sichern! ;-) Möchte man jetzt einen Preis mit x.99 haben, dann einfach products_price=round(products_price*1.05*1.19+0.99)/1.19 Wenn der Preis zu klein ist, kann die Erhöhung natürlich schon ganz schön groß sein. Link to comment Share on other sites More sharing options...
Kloeppy Posted February 6, 2009 Author Report Share Posted February 6, 2009 Hi, super Reinhardt. Damit klappts einwandfrei. Ohne Script und völlig unkompliziert. Manchmal ist die Lösung dann doch einfacher als man denkt ;-) Link to comment Share on other sites More sharing options...
reinhardt Posted February 6, 2009 Report Share Posted February 6, 2009 Bitte! Kleinen Fehler habe ich aber noch in der letzten Variante gefunden mit dem x.99 Preis products_price=(round(products_price*1.05*1.19)+0.99)/1.19 Wenn man Produkte mit unterschiedlichen Steuersätzen in seinem Shop hat, dann muss man natürlich die WHERE Bedingung beachten. update products set products_price=round(products_price*1.05*1.19)/1.19 where tax_class_id=1; (tax_class_id=1 sind bei mir die Produkte mit der Steuerklasse 19%) Link to comment Share on other sites More sharing options...
Kloeppy Posted May 1, 2009 Author Report Share Posted May 1, 2009 Hi, könnte man auch einen abgewandelten SQL-Befehl nutzen um nur die Preise für einen bestimmten Lieferanten, der in xtc hinterlegt ist zu erhöhen ? Link to comment Share on other sites More sharing options...
Kloeppy Posted May 6, 2009 Author Report Share Posted May 6, 2009 Hi, weiß das keiner oder gibt es dafür keine Lösung ? Link to comment Share on other sites More sharing options...
reinhardt Posted May 8, 2009 Report Share Posted May 8, 2009 Sollte gehen, kann ich aber gerade nicht testen, also hier reine Theorie. update products set products_price=round(products_price*1.05*1.19)/1.19 where tax_class_id=1 and manufacturers_id = ... Wenn du die manufactures_id nicht kennst kann du auch einen Join aus beiden Tabellen machen. Es gibt die Tabelle "manufacturers". Ich bin jetzt aber auch kein SQL Profi. Ich würde mir die ID heraussuchen. Link to comment Share on other sites More sharing options...
scorpion78_22 Posted June 3, 2013 Report Share Posted June 3, 2013 Moin Moin, ist jemand in der Lage mir zu sagen wie der Befehl in der DB aussehen muss damit ich die Preisänderung nur bei einem manufacture habe?? wäre voll gut. lg marko Link to comment Share on other sites More sharing options...
Sentor77 Posted June 4, 2013 Report Share Posted June 4, 2013 Moin, im letzten post von reinhardt steht doch schon die Lösung: update products set products_price=round(products_price*1.05*1.19)/1.19 where tax_class_id=1 and manufacturers_id = 1 Dieser Code würde alle Preise mit Steuersatz 1 und Hersteller-Id 1 um 5% erhöhen. LG Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.