سؤال
لدي جدول قاعدة بيانات مثل هذا:
wagetable
name lowhours highhours wage
Default 0 40 10
Default 40 9999 15
Brian 0 40 15
Brian 40 50 20
Brian 50 9999 22
Chad 0 40 13
Chad 40 9999 17
إذا كان "براين" يعمل 43.5151587 ساعة ، فأريد أن يكتشف أنه صنع (40*15)+(3.5151587*20) = 670.303174.
هذه قاعدة بيانات SQLite ، لذلك أعلم أنني سأستخدم:
SELECT wage FROM wagetable WHERE name LIKE 'Brian' AND 'HourNum' BETWEEN lowhours AND highhours;
مع مزيج من الأرضية و ٪ ... أنا فقط لا أضع المنطق في رأسي.
يرجى ملاحظة الإجابات في C# و PHP مقبولة ، حيث يمكنني تحويل المنطق إلى ما أحتاجه. أنا أبحث عن رمز زائف ولكنني سأقبل الإجابات المرسومة
تحرير: يرجى ملاحظة ... لن تكون الساعات التي تعمل أبدًا عدد صحيح دقيق ، لماذا أترك التداخل يحدث.
EDIT2:
أرغب في الحصول على إجمالي ساعات الموظفين (مثال: 43.5151587) ثم أدرك أنه في أول 40 ساعة ، كان يحقق أجرًا قياسيًا @ 15 دولارًا في الساعة. لذلك (40*15) ... ثم عمل 3.5151587 ساعة من العمل الإضافي @ 20 دولارًا في الساعة. لذا (40*15) أضف إليها (3.5151587*20) ... كان المبلغ الإجمالي المكتسب 670.303174
المحلول
من ما أجمعه من رسالتك (psuedocode):
foreach pay_bracket p:
if hours > p.length
pay += p.length * p.pay
hours -= p.length
else
pay += hours * p.pay
end
أين length
هو highhours
- lowhours
(وهذه الأقواس المدفوعة تقع بجوار بعضها البعض ، بالطبع).