2016-03-04 67 views
0

我有兩個表(MySQL的):如何構建多個SQL插入查詢相互依賴?

productSize: { 
    id, 
    article, 
    size, 
    weight 
} 
productPrice: { 
    id, 
    sizeID, 
    price 
} 

sizeID - primery ID形式productSize表。我需要將一個插入到productSize表中,然後插入或更新到productPrice。

我嘗試這樣:

foreach($arrProductSize as $objSize) {    
    /* 
    Insert into productSize here. Get id of new row by mysqli_insert_id() 
    */ 

    foreach($arrProductPrice as $objPrice) { 
     /* 
      Insert or update into productPrice. 
      Save primery id from productSize new row into productPrice new row. 
     */ 
    } 
} 

但我希望加入所有SQL查詢到一個單一的查詢。可能嗎?如果連接失敗,productPrice sql查詢所有過程都必須重新開始,並且在productSize表中會有很多不正確的項目。

我希望用:

mysqli_multi_query($dbi, "INSERT INTO productSize(article,size,weight) VALUES ('','','');INSERT INTO productPrice(sizeID,price) VALUES ('4','');"); 

但sizeID(= 4)我需要得到PFOR prevois插入查詢。

回答

0

您可以使用類似的插入statment該選擇查詢 http://dev.mysql.com/doc/refman/5.7/en/insert-select.html

foreach($arrProductSize as $objSize){ 
    $query = "INSERT INTO productSize(article,size,weight) VALUES ('','','');"; 
    foreach($arrProductPrice as $objPrice) { 
      $query .= "INSERT INTO productPrice(sizeID,price) 
       SELECT id, '{$bjPrice->price}' FROM productSize order BY id desc limit 1; " 
    } 
    mysqli_query($dbi,$query); 
} 
0

INSERT只能插入一個表格的時間,所以這是不可能的productSizeproductPrice插入結合。但是你可以一次完成所有的插入操作。

foreach ($arrProductSize as $objSize) { 
    // insert into productSize here 
    $psid = mysqli_insert_id($conn); 
    $pp_array = array(); 
    foreach ($arrProductPrice as $objPrice) { 
     $pp_array[] = "({$objPrice->id}, $psid, {$objPrice->price})"; 
    } 
    $pp_query = "INSERT INTO productPrice (id, sizeID, price) VALUES " . implode(', ', $pp_array) . " ON DUPLICATE KEY UPDATE sizeID = VALUES(sizeID), price = VALUES(price)"; 
    mysqli_query($conn, $pp_query); 
}