2013-02-20 28 views
0

假設我有3個表格:Standard_Code和Report and Transactions。獲取實際字段名稱和值:簡化版本

Standard_Code表字段名稱:代碼

     值爲:Opening_Balance,Ending_Balance,Actual_Remaining_Balance

報告表字段名稱:Opening_Balance,Ending_Balance,Actual_Remaining_Balance

你可能會想,我爲什麼要做這種重複?嗯,從技術上講,它們是不同的,因爲'Standard_Code'表具有行值,但在'報告'中它們是列,它們是固定的,不能更改。

$ sql =「Select t.code,t.amount From Transactions t Inner Join Standard_Code sc on t.code = sc.code」;

$ result = mysql_query($ sql);

而($行= mysql_fetch_assoc($結果)){

foreach ($row as $col => $val) { 
     echo $col." = ".$val."<br />";   
} 

的SQLQuery = 「更新報告集「」。 fieldname。 「'=」。 ;

} 

據說,在while或foreach循環如何做到這一點查詢更新報告表中:

字段名:從Standard_Code表Code值(這裏的值是實際的現場報告表的名稱)

:從交易表:Amount

這兩件事我不知道如何基於我的要求工作。

我的理由:我有特殊的要求,與報告/涉及特殊的值配置格式化等等。總之,報告是複雜的,這就是爲什麼我創建了一個自定義報告表,所以我可以很容易地得到報告數據格式化。

+0

凡'$ result'變量來自於,什麼是它的內容 – 2013-02-20 08:08:46

+0

@忠-HieuLe增加了更多的細節約$結果 – Raf 2013-02-20 08:29:53

回答

1
$sql = "Select t.code, t.amount From Transactions t Inner Join Standard_Code sc on t.code = sc.code"; 

$result = mysql_query($sql); 
$q = array(); 

while($row = mysql_fetch_assoc($result)) { 
    $q[] = $row['code'].' = '.$row['amount'];  
} 
// UPDATE report SET Opening_Balance = 2, Ending_Balance = 2, Actual_Remaining_Balance = 2 
mysql_query('UPDATE Report SET '.join(', ', $q)); 
+0

有缺SQL格式化 – 2013-02-20 08:20:48

+0

@YourCommonSense更新詳情約$導致 – Raf 2013-02-20 08:30:23

+0

@Raf更新我的榜樣。 – iiro 2013-02-20 08:39:17

0

嗯,我明白了,只要你想,當你遍歷您的交易更新每個類型的code的總和你的情況。這是我的代碼(我們不應該你mysql_ API的更多,我用PDO代替)

$db = new PDO('mysql:host=localhost;dbname=testdb;charset=UTF-8', 'username', 'password'); 

$stmt = $db->prepare("Select t.code, t.amount From Transactions t Inner Join Standard_Code sc on t.code = sc.code"); 
if ($stmt->exectute()) 
{ 
    $rows = $stmt->fetchAll(); 
    foreach($rows as $row) 
    { 
     $stmt = "Update Report Set `" . $row['code'] . "` = `" . $row['code'] . "` + :val"; 
     $stmt->bindValue(":val", $row['amount']); 
     $stmt->execute(); 
    } 
} 

在這種情況下,您的report表只會有一個一行。您也可以將此代碼修改爲INSERT新行代替UPDATE舊記錄。但是,如果使用此方法,則需要額外的主鍵列。