2012-12-20 146 views
1

所以我有这个应用程序,用户创建费用报告。每份报告都有很多收据,我需要能够让用户使用关联的收据删除他们的报告。我有一个SQL语句,现在做到了这一点,但它只能如果报告有收入,因此,如果没有收据的报告犯规被删除:删除记录和所有相关记录,即使没有关联记录

mysql_query("DELETE expense_general, expense_receipts FROM expense_general JOIN expense_receipts ON expense_general.id = expense_receipts.expense_general_id WHERE expense_general.id = {$expenseID}"); 

$ expenseID是报告记录的ID号。所以我会收到声明删除没有收据的报告?

+1

[**请不要在新代码中使用'mysql_ *'函数**](http://bit.ly/phpmsql)。他们不再保留[并正式弃用(https://wiki.php.net/rfc/mysql_deprecation)。看到[**红框**](http://j.mp/Te9zIL)?学习[*准备的语句*](http://j.mp/T9hLWi),并使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [这篇文章](http://j.mp/QEx8IB)将帮助你决定哪个。如果你选择PDO,[这里是一个很好的教程](http://j.mp/PoWehJ)。 – Kermit

+0

也许触发器是最好的。 –

回答

1

使用LEFT JOIN查询,即

DELETE expense_general, expense_receipts 
FROM expense_general 
LEFT JOIN expense_receipts ON expense_general.id = expense_receipts.expense_general_id 
WHERE expense_general.id = {$expenseID} 

这将匹配在expense_general表,无论有什么事情在expense_receipts表链接。

+1

没错。使用LEFT JOIN。 – omickron

0

您需要在表格之间定义“外键关系”。详细表expense_receipts将与expense_general有外键关系,并且当您从expense_general删除行时,相应的明细行也会被删除。

谷歌搜索“MySQL外键”应该给你很多教程可供选择。