2011-03-04 59 views
0

我有两个表。一个是包含数量信息,并具有以下结构更新表使用总和

> mysql> DESCRIBE summary_finished; 
+---------------+---------------+------+-----+---------+ 
| Field   | Type   | Null | Key | Default | 
+---------------+---------------+------+-----+---------+ 
| db_id   | int(11)  | NO | PRI | NULL | 
| finished_id | text   | NO |  | NULL | 
| finished_name | text   | NO |  | NULL | 
| qoh   | int(11)  | NO |  | NULL | 
| value   | decimal(10,2) | NO |  | NULL |     
+---------------+---------------+------+-----+---------+ 


    mysql> DESCRIBE detail_finished; 
    +-------------+---------------+------+-----+---------+ 
    | Field  | Type   | Null | Key | Default | 
    +-------------+---------------+------+-----+---------+ 
    | db_id  | int(11)  | NO | PRI | NULL | 
    | finished_id | text   | NO |  | NULL | 
    | quantity | int(11)  | NO |  | NULL | 
    | value  | decimal(10,2) | NO |  | NULL | 
    +-------------+---------------+------+-----+---------+ 

在detail_finished存在具有相同finished_id许多项的详细信息表。我试图完成的是将具有相同finished_id的项目组合起来,并将该总和更新到summary_finished.qoh字段。这是我到目前为止有:

function set_qty($total, $finished_id){ 
    global $connection; 
    $query="UPDATE summary_finished 
    SET qoh={$total} 
    WHERE finished_id='$finished_id'"; 
    $quantity=mysql_query($query, $connection); 
    confirm_query($quantity); 
    } 


$query="SELECT finished_id, SUM(quantity) FROM detail_finished GROUP BY finished_id"; 
$result=mysql_query($query, $connection) or die(mysql_error()); 

while($row = mysql_fetch_array($result)){ 
    set_qty($row['SUM(quantity)'], $row['finished_id']); 
    } 

我知道的款项都正确计算,我可以附和他们直出,但我不能让我的表进行更新。原谅我的sl code代码我完全用mysql很新。预先感谢您的帮助。

回答

1

我不知道你为什么使用文本类型来存储id。顺便说一下

update summary_finished as sf 
inner join (
select finished_id, 
     sum(quantity) as total 
from detail_finished 
group by finished_id)as t 
set sf.qoh = t.total 
where sf.finished_id = t.finished_id 
+0

这是给我不正确的数字。约3000关。我有文本类型ID,因为这是在我们的主库存系统中使用的ID。示例ID是M70951BLA。这可能是我的问题在哪里?在我开始尝试使用sum之前,您的查询显示了我的方式过于复杂的脚本的确切数字。 – Rich 2011-03-04 19:35:14

+0

如果您的代码与M70951BLA类似,则可以使用varchar类型。文字不是必需的。你的意思是不正确的数字是什么?你能举一些例子吗?我试过我的查询,结果是正确的。 – 2011-03-04 19:51:24

+0

如果我转储finished_detail和finished_summary数量和qoh的总数都应匹配。但他们没有。将类型更改为varchar并重新运行 – Rich 2011-03-04 19:57:31