Ok, lad mig proeve at forstaa. Du har oprettet spoergsmaalet under MySQL, saa jeg gaar ud fra at du har dine data i MySQL tabeller, saa lad mig foerst proeve at forstaa disse tabeller.
Jeg gaar ud fra at du har en Varetabel med (mindst) disse fire felter: vareid, varetype, varebetegnelse, vejl_pris.
En rabat er vel en procentvis reduktion af vejl_pris. Hvad afhaenger rabat-procenten af? Spoergsmaalet antyder at rabatten afhaenger af varegruppe (hvor du maaske kun kan give lille rabat paa tekstiler paa grund af konkurrence fra Kina men stoerre rabat paa moebler) antal (for eksempel 5% for 100-199, 7% for 200-499, 10% for 500-999 o.s.v.). Rabatten afhaenger ogsaa af antal (for eksempel paa moebler 5% for 10-19, 7% for 20-49, og 10% for 50 og over). Og saa afhaenger rabatten af kundens omsaetning saa maaske kunder med mere end en million faar standardrabatterne plus 20% (12% hvis standardrabatten er 10%) og kunder med mere end ti millioner faar standardrabatterne plus 33%.
Hvis jeg, i princippet, er paa rette spor saa er spoergsmaalet hvor du bevarer disse rabatregler. En mulighed er at du har en rabat_regel tabel med felterne rabat_regel_id, varetype, og antal, for eksempel med disse records:
og saa en omsaetnings_rabat tabel som for eksempel id omsaetning rabat_foroegelse 1 1,000,000 1,2 2 10,000,000 1,33
Og saa har du uden tvivl en Kundetabel med felter som id, kundenavn, og omsaetning.
Hvis du skal finde ud af hvad kunden med kundeid 25 skal betale for 225 stk af varen med vareid 512 skal du saa nok have fat i en query som denne - den er ikke testet men er blot et eksempel.
SELECT 225*vejl_pris*(100-rabat)*(SELECT rabat_foroegelse FROM Omsaetningrabat o WHERE omsaetning = (SELECT omsaetning FROM Kunder WHERE kundeid = 25)) AS pris FROM Varer v JOIN Rabatregler r ON v.varetype = r.varetype WHERE v.vareid = 512 AND 225 BETWEEN antal1 AND antal2.
Det var saa min forespoergsel/brainstorming. Foerst og fremmest har jeg forstaaet din tabelstruktur korrekt? Hvis ikke, hvor gik jeg galt. Derefter har jeg gaettet rigtigt med hensyn til problemet? Hvis ikke saa fortael mig.
Inerestant. Som sagt er den "nye" rabat tabel(ler) ikke lavet endnu.
Systemet i dag har en tabel der indeholder mine varer, naturligvis med felter som vareid, varetekst, vejl_pris, varegruppe og kost_pris
Min rabat tabel ser i dag således ud. Men det er den der står til skrotning.
discount_id: Unikt ID til rabat reglen discount_group: evt. hvis der skal gives assorteret rabat med andre varer discount_item: varenr discount_customer_area_type: Kundenr|Kundegruppe|Allekunder discount_customer_area: Gruppenavn|kundenr discount_value_type: Rabat I %|Fast prin|Kost+ discount_value: ex. 15%|244Kr.|kost+30% discount_volume: antal emner der skal gives rabat på
Mit problem i dag er at jeg er nød til at trække en del af rabat aftalerne ud og derefter beregne hvilken rabat der er bedst og dermed kundens pris.
Kunne godt tænke mig noget ala det eksempel du giver, men er dog i tvivl om ikke det bliver meget kompliceret når der blandt andet skal være mulighed for assorteret rabat.
Prøver lige endnu engang at se om jeg kan forklare hvad jeg præcist vil.
1. Definere hvilke vare og grupper rabat reglen gælder og IKKE gælder for. ex. groups: møbler/sofaer, møbler/stole groups_deny: møbler/sofaer/puder items: 2546587, 4685763, 4657643 items_deny: 5867635 (måske en speciel sofa)
2. Definere hvilke kunder og kundegrupper rabat reglen gælder og IKKE gælder for customer_groups: engros customer_groups_deny: engros/planter customers: 4675437 customers_deny:
3. Sæt om rabatten er assorteret (true/false) 4. Beregn rabatten 1stk: $vejl_pris-15% 5stk: $vejl_pris-20% oms-5000: $cost_pris+30%
Ud fra ovenstående "Form" vil jeg gerne kunne lave mine inserts til min(e) rabat tabelle(r).
Tanken med både punkt 1 og 2 er at vælge dem ud i ex. en træstruktur der viser grupper og varer|kunder.
Vi kommunikerer ikke! Jeg kan ikke bidrage til loesning hvis jeg ikke forstaar problemstillingen knivskarpt, og jeg er ikke intelligent nok til at gennemskue den forklaring du giver. Din forklaring forekommer mig vag og taaget, uden tvivl fordi det er min hjerne der er vag og taaget. Maaske burde vi stoppe med det samme saa jeg ikke spilder mere af din tid. Men forinden proever jeg lige en gang mere at demonstrere mit niveau som du er noed til at tale ned til.
Et problem er at jeg ikke kender udtrykket assorteret rabat. Du maa forklare mig hvad det indebaerer.
Jeg er heller ikke klar paa hvad hovedreglen er. Er hovedreglen at en kunde betaler de vejledende priser med mindre der er betingelser/rabatregler der giver mulighed for rabatter? Saaledes at kunden skal kvalificere og varen skal kvalificere? (Hvis sofaer kvalificere og engros kunder kvalifierer saa skal begge betingelser vaere opfyldt (sofaer og engroskunder) foer der gives rabat?)
For hver af de to betingelser (kunder og varer) har du saa regler baseret paa hovedgrupper, undergrupper, og individuelle kunder/varer. Varer faar ingen rabat med mindre de er i en "groups" saasom moebler/sofaer og moebler/stole. Saaledes faar (for eksempel) porcelaenshunde ingen rabat. Hvis en vare-hovedgruppe faar rabat saa kan der goeres undtagelser for undergrupper, saasom moebler/sofaer/puder eller for individuelle sofaer for eksempel item 2546587. Og kunder faar ingen rabat med mindre de falder i en hovedgruppe med rabat, for eksempel engros. Saa for eksempel detail kunder faar ingen rabat. Og i en rabatgruppe kan der goeres undtagelser for undergrupper saasom engros/planter (jeg gaar ud fra at "planter" er en kunde der planter noget, ikke blomster og buske, for saa hoerer det hjemme under varer, ikke kunder.)
Saa hvis enten varen eller kunden ikke kvalificerer saa er der ingen rabat og det er de vejledende priser der gaelder (gaar jeg ud fra.) Hvis baade kunden og varen kvalificerer saa maa stoerrelsen af rabatten fastsaettes. Stoerrelsen af rabatten afhaenger af to faktorer, "antal" og "omsaetning". Omsaetning, er det den paagaeldende kundes totalomsaetning aaret foer (eller maaneden/kvartalet foer) eller er det stoerrelsen af den enkelte ordre? Hvis omsaetning er stoerrelsen af den enkelte ordre saa kunne kriteriet antal maaske skrottes?
Og saa synes du at have to metoder at beregne netto prisen, vejledende pris minus en procentsats (som afhaenger af en kombination af varer, kunder, og antal) og kostpris plus en procentsats. Hvornaar bruger du den ene og hvornaar (og hvorfor) bruger du den anden?
Tror nu ikke det er dit niveau der fejler noget. Måske nærmere mig der ikke er vant til at opsætte en ordenlig kravspecifikation.
1. Assorteret rabat er hvis en kunde ex. køber 1 stk. af 5 forskellige varer der er i samme rabat regel. Hvis assorteret er sat til true, skal rabatten beregnes ud fra 5 Stk. / samlet omsætning
2. Hoved reglen er at kunden betaler vejl. udsalgspris med mindre kunden er kvalificeret til andet gennem rabat reglerne.
3. kundegrupper og varegrupper kan være i ubegrænsede antal niveauer. der kan gives rabat efter gruppe eller varenummer. Der kan ekskluderes efter samme fremgangsmåde. (Forestil dig en træstruktur som i stifinder hvor du kan markere hele mapper, enkelte filer. Eller evt. markere en mappe, og derefter fravælge en enkelt fil i den markerede mappe)
4. Ja. Hvis både varen og kunden kvalificere sig, skal rabatten beregnes. Hver linie repræsentere en rabat enten ud fra antal emner i kurven. eller samlet omsætning af varen i kurven. (Det er kun et eksempel at begge løsninger er sat op. - normalt vis vil kun stk. eller oms. blive brugt i en regel.)
5. Ja, rabatter kan beregnes efter 2 metoder. 1. Beregnes ud fra salgspris (Kan dog være både være - antal %, - antal kr.) eller beregnes efter kost pris. Priskalkulationen skal ses som et regne stykke hvor, $kost og $vejl kan bruges som variabler. Kunne egentlig være følgende selvom det måske ikke giver mening: $vejl-(2*$kost)/0.5
Tror umiddelbart det er den bedste forklaring jeg kan komme med. Hvis det stadig virker lidt tåget, skal jeg ikke bruge mere af din tid. Uanset må du gerne smide et svar som tak for forsøget. Dialog bidrager altid med noget.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.