0

我正在尝试做的是计算一家公司拥有的用于在线游戏的土地的总价值。每个城市的土地当前价值作为 acre_price 存储在 city_list 表中。公司拥有的英亩数作为数量存储在 company_land 表中。所以总价值是acre_price * amount,对公司拥有土地的每个城市都这样做,然后把它们加起来。

acre_price 无法存储在 company_land 表中的原因是因为它是一个不断变化的值 - 如果有足够的活动,它可以每隔几分钟更改一次,并且在两个不同的表中保持土地价值最新会很多工作的。

这是我想出的,并且它成功了一半。它计算了正确的值,但仅适用于公司拥有土地的 1 个城市(数据库中的最新条目)。我需要它来计算数据库中所有条目的值。我尝试在第二个查询中将 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 循环,它应该包含第二个循环,因为第一个循环所做的只是计算从第一个查询返回的行数,并且只返回该查询的最后一行($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 回答