2015-12-08 106 views
0

我有如下所示的两个表:如何使用一个查询跨多个表进行删除?

表1: 发票

表2: invoice_details

public function deleteInvoice($id='') 
    { 
     if(!empty($id)){ 
      $query = "DELETE FROM invoices where uuid ='$id'"; 
      if(mysqli_query($this->_con, $query))return true; 
      else return false; 
     }else{ 
      return false; 
     } 
    } 

表2包含一个所谓的 “INVOICE_ID” 列,其涉及表1的“id”

每当我使用上述函数删除发票时,我也想同时删除invoice_details。有没有简单的方法来修改上面的代码来做到这一点?

回答

2

首先,你需要把一个外键约束上invoice_details

ALTER TABLE invoice_details 
    ADD CONSTRAINT fk_invoice 
    FOREIGN KEY(invoice_id) 
    REFERENCES invoices(id) 
    ON DELETE CASCADE; 

然后你就可以删除你的发票,它会自动删除细节

+0

非常感谢您! fancyPants忘记将invoice_id放在括号中,因此只通过@fancyPants选择了您的答案。 – Steven

1

请勿修改代码。在具有ON DELETE CASCADE选项的表格之间建立外键关系。

ALTER TABLE invoice_details ADD CONSTRAINT fk_invoice FOREIGN KEY invoice_id REFERENCES invoices(invoice_id) ON DELETE CASCADE; 

现在数据库为您完成这项工作。

相关问题