2

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

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」の違いを見つけようとしています(WHERE id = $idを使用して)

例:

ID 1、アイテム名チキン。12 月の distmoney は 20 ですが、11 月の distmoney は 21 です。id=1、itemname=chicken の 1 の差を計算できるようにしたいと考えています。鶏肉の違いのみを表示し、他の項目名 (豚肉など) は表示しないでください。

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

特定のアイテム名の前月のdistmoneyを見つけて、それを「oldmoney」という新しい列に挿入することもできますが、これを行う方法がわかりません.

例: ID 3 の場合、アイテム名はチキンです。現在の distmoney は 20 で、前の月 (id = 1 で見つかった) は 20 です。20 を取得して、id 3 の下の新しい列に挿入しましょう。

<?php
foreach($rows as $row):
 $number1 = htmlentities($row['distmoney'])
endforeach;

$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

1 に答える 1

1

項目を照会するときは、ORDER BY itemname を 最初に実行します。

次に、次のようなことを行います

//Create a variable to hold the "previous month" values
$previousItemName = '';
$previousDistMoney = '';

//Check each record from your query
foreach($rows as $row) {

   //If not first time around && same item name as previous
   if($previousItemName != '' && $previousItemName == $row['itemname']) {

      //subtraction calculation here
      //$difference = $row['distmoney'] - $previousDistMoney;  ??
      //echo $difference;  ??
   }

   //Assign the "previous month" value
   $previousItemName = $row['itemname'];
   $previousDistMoney = $row['distmoney'];
}

これらの方法はどちらも少し汚れていますが、代わりにループを実行することもできます: for($i =0; $i < count($results); $i++) { }

次に、$results[$i-1]['distmoney']; の値を確認します。


編集。

クエリ文字列から ID がわかっている場合は、それをクエリに入力するだけで、2 つの「チキン」レコードのみが返されます。

select  itemname, distmoney from items where itemname in (
   select itemname from items where id = 3
)
于 2013-01-15T20:29:11.710 に答える