मैं एक PHP चर का उपयोग कर रहा हूं जो आज और जब एक प्रविष्टि बनाई गई थी, के बीच दिनों की संख्या की गणना करता है:

DATEDIFF(NOW(), l.created)

मैं एक PHP समीकरण कैसे लिख सकता हूँ जहाँ इस मान के पहले 30 दिनों को 1 अंक से गुणा किया जाता है, फिर दिन 30-60 से 2 अंक प्रत्येक, फिर 60-90 से 3 अंक, आदि दिनों की कुल संख्या तक। सृजन के बाद से, और फिर सभी बिंदुओं का योग।

तो अगर किसी चीज को केवल 15 दिनों के लिए बनाया गया है, तो उसे 15 अंक दिए जाते हैं। लेकिन अगर 45 दिनों के लिए कुछ बनाया गया है, तो उसे 60 अंक (30 * 1 प्लस 15 * 2) दिया जाता है?

php
-1
John 19 जुलाई 2011, 03:51
अंकगणित, जॉन। यह पूछना निराशाजनक है।
 – 
Dan Grossman
19 जुलाई 2011, 04:04

3 जवाब

सबसे बढ़िया उत्तर

कलन विधि:

$d = <number of days>;

$m = intval($d / 30);  // completed months
$r = intval($d % 30);  // remaining days beyond that

$score = ($m * ($m + 1) / 2) * 30 + ($m + 1) * $r;

//       ^^^^^^^^^^^^^^^^^^^        ^^^^^^^^
//       accumulated levels        final lvl.

उदाहरण: $d = 45 के लिए, हमारे पास $m = 1 और $r = 15 हैं, जो 30 + 2*15 = 60 देते हैं।


एसक्यूएल में इसका एक फ्री-स्टैंडिंग फॉर्मूलेशन यहां दिया गया है, लेकिन आपको इसे सबक्वायरी या जॉइन या कुछ के साथ अपने फंक्शन से जोड़ना होगा:

SELECT TRUNCATE((TRUNCATE(d/30, 0) * (TRUNCATE(d/30, 0) + 1) / 2) * 30 + (TRUNCATE(d/30, 0) + 1) * (d % 30), 0) AS score
FROM (SELECT 45 AS d) AS t;   
2
Kerrek SB 19 जुलाई 2011, 05:30
धन्यवाद ... कोई विचार है कि इसे MySQL में कैसे परिवर्तित करें?
 – 
John
19 जुलाई 2011, 05:17
एक और निराशाजनक सवाल। क्या आपने इसे स्वयं करने की कोशिश की?
 – 
Dan Grossman
19 जुलाई 2011, 05:21
मैंने एक कंकाल SQL क्वेरी जोड़ा।
 – 
Kerrek SB
19 जुलाई 2011, 05:30
for ($i = 0; $i < $number; $i++) $points += ceil($i / 30);
1
Dan Grossman 19 जुलाई 2011, 04:03
<?
$day_num = 90;
$points = 0;
for($i=1;i<=$day_num;$i++)
{
    $points += ceil($i/30);
}
echo $points;
?>
1
Mike 19 जुलाई 2011, 04:08