1

「アイテム」というテーブルがあります

id       month       year       **itemname**       distmoney
 1        12         2012         chicken           20
 2        12         2012         pork              15
 3        11         2012         chicken           21
 4        11         2012         pork              15

2 か月間の同じ項目名の「distmoney」の違いを見つけようとしています。

例:

ID 1、アイテム名チキン。12月のdistmoneyは20ですが、11月のdistmoneyは21です。id=1、itemname=chickenの1の差を計算できるようにしたいです

現在、2 つの数値の差を計算するための php コードがありますが、前月の distmoney を取得する方法を理解するのに苦労しています。

<?php foreach($rows as $row): ?>
<?php $number1 = htmlentities($row['distmoney']) ?>
<?php endforeach; ?>
<?php
$number1 = $row['distmoney'];
$number2 = ????????; // THIS NEEDS TO BE THE PREVIOUS MONTH DISTMONEY VALUE
if ($number1 <= $number2) {
$difference = "(Price Lowered) Price difference of $";
$result = $number2 - $number1;
$percent = round(100.0*($number2-$number1)/$number1);
echo $difference; echo $result; echo $percent; echo "%";
} elseif ($number1 > $number2) {
$result = $number1 - $number2;
$percent = round(100.0*($number2/$number1-1));
$addition = "(Price Higher) Price difference of $";
echo $addition; echo $result; echo $percent; echo "%";
} 

?>

4

2 に答える 2

1

これをSQLで実行する場合は、列のデータを変換して、違いを取得できます。

select 
  itemname,
  max(case when month = 12 and year = 2012 then distmoney else 0 end) Dec2012,
  max(case when month = 11 and year = 2012 then distmoney else 0 end) Nov2012
from yourtable
group by itemname

SQL FiddlewithDemoを参照してください

クエリの結果は次のとおりです。

| ITEMNAME | DEC2012 | NOV2012 |
--------------------------------
|  chicken |      20 |      21 |
|     pork |      15 |      15 |
于 2013-01-15T01:25:01.667 に答える
1

itemname でグループ化されるようにデータを前処理し、その項目の distmoney 値の配列を保存するだけです。データが日付順に正しくソートされていると仮定します。

$diff = array();
foreach($rows as $row)
{
   if(!isset($diff[$row['itemname']])
   {
      $diff[$row['itemname']] = array();
   }
   $diff[$row['itemname']][] = $row['distmoney'];
}

foreach($diff as $itemname=>$months)
{
    if(count($months) == 2)
    {
        echo $itemname.' difference: '.$months[0]-$months[1];
    }
}
于 2013-01-15T01:20:43.093 に答える