2011-11-30 22 views
0

刪除我有3個表:如何從多個表

  1. events。在這我有字段,如 event_id, user_id, title, email, location, address, latitude, longitude, description, isapproved

  2. event_time。在此我有字段 show_id, event_id, start_date, start_time, end_date, duration, date, end_time

  3. categoryid, cat_id, event_id

我插入數據到3個表,這樣,如果被輸入的event_id 5的事件到event表,則相應的數據將請填寫event_titlecategory。 在填寫event_time表,如果該事件start_time2011-12-05end_date2011-12-07然後event_time表將充滿了3行像相同的事件ID和不同日期:

show_id event_id start_date start_time end_date duration date   end_time 
11  5   2011-12-05 12:00:00 2011-12-07 03:00:00 2011-12-07 15:00:00 
10  5   2011-12-05 12:00:00 2011-12-07 03:00:00 2011-12-06 15:00:00 
9  5   2011-12-05 12:00:00 2011-12-07 03:00:00 2011-12-05 15:00:00 

category表將根據 數量的輸入在類別下拉列表中選擇的類別。

id cat_id event_id 
25 3 5 
24 5 5 

現在我想根據用戶選擇從數據庫中刪除事件。如果他想刪除特定日期的事件,那麼只有在event_time它應該被刪除的事件,它應該在那裏的類別。 但是,如果用戶想要刪除不是基於任何日期的事件,則應刪除所有表中的數據。

<?php 
include_once("webconfig.php"); 
include_once("webdatabase.php"); 
$show_id = isset($_REQUEST['show_id'])?trim($_REQUEST['show_id']):""; 
$event_id = isset($_REQUEST['event_id'])?trim($_REQUEST['event_id']):""; 

if(isset($show_id)) 
{ 
$s="select * from event_time where event_id='$event_id'"; 
$num_rows = mysql_num_rows($s); 
die($num_rows); 
$exe=$db->query($s); 
if($db->row_count()==1) 
{ 
$sql ="Delete events,event_time,category from events join event_time join category   on(events.event_id=event_time.event_id and event_time.event_id=category.event_id) where event_time.show_id='$show_id'"; 
$exe=$db->query($sql); 
$successMsg = "deleted Successfully! . "; 
$xml = '<?xml version="1.0" encoding="utf-8"?>'; 
$xml .= '<root>'; 
$xml .= '<delete>'; 
$xml .= '<status>True</status>'; 
$xml .= "<message>$successMsg</message>"; 
$xml .= '</delete>'; 
$xml .= '</root>'; 
echo $xml; 
} 
else 
{ 
$sql1 ="Delete event_time from event_time where event_time.show_id='$show_id'"; 
e=$db->query($sql1); 
$successMsg = "deleted Successfully! . "; 
$xml = '<?xml version="1.0" encoding="utf-8"?>'; 
$xml .= '<root>'; 
$xml .= '<delete>'; 
$xml .= '<status>True</status>'; 
$xml .= "<message>$successMsg</message>"; 
$xml .= '</delete>'; 
$xml .= '</root>'; 
echo $xml; 
} 
} 
else 
{ 
$xml = '<?xml version="1.0" encoding="utf-8"?>'; 
$xml .= '<root>'; 
$xml .= '<delete>'; 
$xml .= '<status>false</status>'; 
$xml .= "<message>no data found</message>"; 
$xml .= '</delete>'; 
$xml .= '</root>'; 
echo $xml; 
} 
?> 

這就是我寫的代碼。 任何人都知道如何做到這一點?

+0

什麼是數據庫?這會觸發解決方案嗎? –

回答

0

您可能必須在代碼中執行所有操作。如果數據庫平臺支持觸發器,則可以使用觸發器,還應該查看約束和級聯選項。

例如,「刪除級聯」約束會自動處理刪除事件的情況,因爲它會刪除event_time中的相關記錄和您的類別。

最簡單的解決方案是使用代碼。因此,在您的應用程序中,確定需要清理的內容,並自行發出刪除。

要刪除一個事件的所有時間和事件信息:

DELETE FROM event_time WHERE event_id = 5; 
DELETE FROM event WHERE event_id = 5; 
DELETE FROM category WHERE event_id = 5; 

或者明明只刪除時代:

DELETE FROM event_time WHERE show_id = 23; 

你需要處理的情況下,只有一個時間,如果事件保存在這種情況下?這取決於你。

+0

非常感謝你 – Nithin

0

對於像這樣的問題,總是發佈SQL DDL和INSERT語句。

目前尚不清楚您是僅從event_time或event_time和events刪除行。

從event_time刪除行很簡單。

delete from event_time where event_id = (?) 

到刪除的事件和EVENT_TIME行,但在產品離開行最簡單的方法,就是

  • 使用在EVENT_TIME事項標識外鍵約束,
  • 使用ON DELETE CASCADE在外國鍵,
  • 使用在類別上沒有EVENT_ID國外

這樣做後,您可以從事件中刪除一行,並且數據庫引擎將刪除event_time中的相關行。

delete from events where event_id = (?) 

您需要使用INNODB引擎來執行外鍵約束。

說了這麼多之後,在將其從所有其他表中刪除之後,將event_id 5留在類別表中看起來很奇怪。