2012-12-20 65 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外鍵」應該給你很多教程可供選擇。