2013-05-04 71 views
-1

我有一個主鍵「ID」和由price_date,fund_id,currency_id的唯一約束的數據庫,類標識碼插入對重複鍵更新 - 在mysqli的循環

$query = "INSERT INTO `price_data` (`price_date`, `fund_id`, `currency_id`, `class_id`, `nav`, `nav_change`) VALUES"; 


$format = " ('%s', '%s', '%s', '%s', %f, %f),"; 

// Go over each array item and append it to the SQL query 
foreach($prices as $price) { 
    $query .= sprintf(
     $format, 
     $mysqli->escape_string($price['PriceDate']), 
     $mysqli->escape_string($price['Fund']), 
     $mysqli->escape_string($price['Currency']), 
     $mysqli->escape_string($price['Class']), 
     $mysqli->escape_string($price['NAV']), 
     $mysqli->escape_string($price['NavChange']) 
    ); 
} 
// The last VALUES tuple has a trailing comma which will cause 
// problems, so let us remove it 
$query = rtrim($query, ','); 

// MySQLi::query returns boolean for INSERT 
$result = $mysqli->query($query); 

我想改變查詢像

INSERT INTO `price_data`(price_date , fund_id , currency_id , nav , nav_change) VALUES() ON DUPLICATE KEY UPDATE nav='',nav_change=''; 

我試圖把這段最初的查詢是沒有得到的導航和nav_chnge到查詢的值。

$query .= ' ON DUPLICATE KEY UPDATE nav=$format$mysqli->real_escape_string($data[\'NAV\']),nav_change=$format,$mysqli->real_escape_string($data[\'NavChange\'])'; 

如果我回應結果查詢,它看起來像下面

INSERT INTO `price_data` (`price_date`, `fund_id` , `currency_id`, `class_id`, `nav`, `nav_change`) VALUES ('2013-04-29', 'AAAA', '0', 'A', 11.793300, 0.054000), ON DUPLICATE KEY UPDATE nav=$format$mysqli->real_escape_string($data["NAV"]),nav_change=$format,$mysqli->real_escape_string($data["NavChange"]) 

感謝您的幫助。

回答

0

可能有更乾淨的方法來做到這一點,但在循環內附加到這樣的查詢爲我工作。

$format = " ('%s', '%s', '%s', '%s', '%s', %f, %f)"; 
$format_update_nav = " '%f' , "; 
$format_update_nav_change = " '%f' ; ";  


$query = "INSERT INTO `aprice_data` (`price_date`, `fund_id`, `manager_id` , `currency_id`, `class_id`, `nav`, `nav_change`) VALUES "; 

        $query .= sprintf(
         $format, 
         $mysqli->real_escape_string($data['Date']), 
         $mysqli->real_escape_string($data['Fund']), 
         $mysqli->real_escape_string($data['Manager']),  
         $mysqli->real_escape_string($data['Currency']), 
         $mysqli->real_escape_string($data['Class']), 
         $mysqli->real_escape_string($data['NAV']), 
         $mysqli->real_escape_string($data['NavChange']) 
        ); 

        $query .= ' ON DUPLICATE KEY UPDATE nav = '; 
        $query .= sprintf(
         $format_update_nav, 
         $mysqli->real_escape_string($data['NAV'])      
        ); 

        $query .= 'nav_change = '; 
        $query .= sprintf(
         $format_update_nav_change, 
         $mysqli->real_escape_string($data['NavChange'])     
        ); 


    $result = $mysqli->query($query); 

這回看起來像這樣

INSERT INTO `price_data` (`price_date`, `fund_id`, `manager_id` , `currency_id`, `class_id`, `nav`, `nav_change`) VALUES ('2013-05-03', 'WXYA', '17', '0', 'A', 456456.000000, 456456.000000) ON DUPLICATE KEY UPDATE nav = '456456.000000' , nav_change = '456456.000000' ; 
INSERT INTO `price_data` (`price_date`, `fund_id`, `manager_id` , `currency_id`, `class_id`, `nav`, `nav_change`) VALUES ('2013-05-03', 'BXYA', '17', '0', 'A', 0.130000, 0.000000) ON DUPLICATE KEY UPDATE nav = '0.130000' , nav_change = '0.000000' ; . . . 
查詢