0

私がやろうとしているのは、会社がオンラインゲームのために所有している土地の総額を計算することです。各都市の土地の現在の値は、city_listテーブルにacre_priceとして格納されます。会社が所有するエーカーの量は、amountとしてcompany_landテーブルに格納されます。したがって、合計値はacre_price * amountになり、会社が土地を所有するすべての都市に対してそれを行い、それをすべて合計します。

acre_priceをcompany_landテーブルに保存できない理由は、acre_priceが常に変化する値であるためです。十分なアクティビティがある場合は数分ごとに変化する可能性があり、2つの異なるテーブルで土地の値を最新の状態に保つことは非常に重要です。仕事の。

これは私が思いついたものであり、それは中途半端に機能します。正しい値を計算しますが、会社が土地を所有している1つの都市(データベースの最新のエントリ)に対してのみです。データベース内のすべてのエントリの値を計算するために必要です。2番目のクエリでfetchをfetchAllに変更しようとしましたが、コードが壊れて白いページしか表示されませんでした。

これを達成するために私が何をする必要があるか誰かが知っていますか?

前もって感謝します :)

$sth = null; $count = 0; $data = array();
$sth = $dbh->prepare("SELECT * FROM company_land WHERE company_id = ?");
$company_land_query = $sth->execute(array($_GET['id']));

if($company_land_query){
while($row = $sth->fetch()){
    $land_data = $row;
    ++$count;
}
    if($count > 0){
        $sth = null; $count = 0; $data = array();
        $sth = $dbh->prepare("SELECT * FROM city_list WHERE city_id = ?");
        $land_price_query = $sth->execute(array($land_data['city_id']));
            while($row = $sth->fetch()){
            $city_data = $row;
            $land_value = $land_data['amount'] * $city_data['acre_price'];
            }
    }
}
4

2 に答える 2

1

SELECTこのようなクエリで単一のステートメントを使用してその値を計算できます

SELECT SUM(l.amount * c.acre_price) total
  FROM company_land l INNER JOIN
       city_list c ON l.city_id = c.city_id

テーブルとサンプル データの DDL が提供されていないため、テストされていません。

于 2013-03-17T04:56:43.967 に答える
0

最初の while ループを閉じるのが早すぎます。2 番目のループを囲む必要があります。これは、最初のループがすべて最初のクエリから返された行数をカウントし、そのクエリから最後の行のみを返すためです ($land_data は上書きされています)。使用せずに数回)。

コードは次のようにうまく機能するはずです。いくつかのコードを移動し、不要な行をいくつか削除したことに注意してください。

/*
 * Prepare both queries here, moved the city_list query out from the loops, no
 * need to prepare it multiple times.
 */
$sthLand = $dbh->prepare("SELECT * FROM company_land WHERE company_id = ?");
$sthCity = $dbh->prepare("SELECT * FROM city_list WHERE city_id = ?");
$land_value = 0;

if ($sthLand->execute(array($_GET['id']))) {
    while($land_data = $sthLand->fetch()) {
        if ($sthCity->execute(array($land_data['city_id']))) {
            while($city_data = $sthCity->fetch()) {
                $land_value += $land_data['amount'] * $city_data['acre_price'];
            }
        }
    }
}

$land_value には、会社が所有する土地の総額が含まれます。

于 2013-03-17T04:31:46.427 に答える