0
month   year    customer    distributor    number   name    price   
10      2012    20          8              2406163 CHEESE   50.4
10      2012    20          8              2325141 APPLE    25.2
11      2012    20          8              2406163 CHEESE   48.1
11      2012    20          8              2325141 APPLE    20.2
12      2012    20          8              2325141 APPLE    23.2
12      2012    20          8              2406163 CHEESE   46.4

「数値」が同じ値である 2 か月を比較しようとしています。価格の違いを見つけたいと思います (ある場合)。

上記のデータを使用して、11 月と 12 月 (または、ユーザーが選択した月に応じて 10 月と 11 月) を比較したいと思います。したがって、11 か月目と 12 か月目の場合、チーズの価格差は -$1.7 で、リンゴの価格差は -$3 です。これは私がやろうとしていることですが、「番号」が同じである2か月間にテーブルで見つかったすべての行に対してこれを行う必要があります。

これが私の現在のコードです...現在、アイテム番号ではなくアイテム名で比較しています。しかし、不思議なことに、200以上のアイテムのうち3つのアイテムしか違いが見つかりません。

ご協力ありがとうございます。

<?PHP
$from_date = $from_month;
$to_date = $to_month;
$query = " 
   select * from ogi
   where month BETWEEN '" . $from_date . "' AND  '" . $to_date . "' GROUP BY number HAVING count(*) > 1 ;
"; 
try 
{ 
    // These two statements run the query against your database table. 
    $stmt = $db->prepare($query); 
    $stmt->execute(); 
} 
catch(PDOException $ex) 
{ 
    // Note: On a production website, you should not output $ex->getMessage(). 
    // It may provide an attacker with helpful information about your code.  
    die("Failed to run query: " . $ex->getMessage()); 
} 

// Finally, we can retrieve all of the found rows into an array using fetchAll 
$rows = $stmt->fetchAll(); 

//Create a variable to hold the "previous month" values
$previousname = '';
$previousprice = '';

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

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

  //subtraction calculation here

  if ($row['price'] <= $previousprice) {
$difference = "(Price Lowered) Price difference of $";
$result = $previousprice - $row['price'];
$percent = round(100.0*($previousprice/$row['price']-1));

   ?>
            <tr>
                <td><?php echo "" . $row['name'] . ""?></td>
                <td><?php echo $difference; ?><?php echo $result ?>        </td>
                <td><?php echo $percent; ?> %</td>

            </tr>
            <?
} elseif ($row['price'] > $previousprice) {
$result = $row['price'] - $previousprice;
$percent = round(100.0*($previousprice/$row['price']-1));
$addition = "(Price Higher) Price difference of $";

 ?>
            <tr>
                <td><?php echo "" . $row['name'] . ""?></td>
                <td><?php echo $addition; ?><?php echo $result ?>    </td>
                <td><?php echo $percent; ?>%</td>

            </tr>
            <?
} 
   }
   else {
   ?>
   <!-- <tr>
                <td><?php echo "" . $row['name'] . ""?></td>
                <td></td>
                <td></td>

            </tr> -->
            <?

}

//Assign the "previous month" value
$previousname = $row['name'];
$previousprice = $row['price'];

}


?>
<?
}
else {
?>
<form action="" method="post">
Choose Months to Compare:<br>
Customer: <input type="text" name="customer"><br>
Month 1: <input type="text" name="from_month"><br>
Month 2: <input type="text" name="to_month"><br>
<input type="submit" value="Compare">
</form>
<?
}
?>
4

1 に答える 1

1

次のようなものはどうですか:

SELECT a.number, a.name, (a.price - b.price) as pdiff
FROM table a, table b
WHERE a.number = b.number 
    AND a.month = montha 
    AND b.month = monthb;

私が間違いを犯していなければ、このクエリで必要な情報が得られるはずです。

(たとえば、月 a = 10、月 b = 11)

お役に立てれば。

于 2013-02-04T20:08:07.647 に答える