我有3张桌子:
表events
。在这里,我有像
event_id, user_id, title, email, location, address, latitude, longitude, description, isapproved
表event_time
。在这里我有领域
show_id, event_id, start_date, start_time, end_date, duration, date, end_time
表category
:
id, cat_id, event_id
我正在将数据插入3个表中,以便在event_id
表中输入event
5事件时,相应的数据将填入event_title
和{{1} }。
如果事件category
为event_time
且start_time
为2011-12-05
,则填充end_date
表格时,2011-12-07
表格将填充3行,例如同一事件id和不同的日期:
event_time
将根据输入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
这就是我编写的代码。 有谁知道怎么做?
答案 0 :(得分:0)
总是发布SQL DDL和INSERT语句来解决这个问题。
目前尚不清楚是否只想从event_time或event_time和事件中删除行。
从event_time删除行很简单。
delete from event_time where event_id = (?)
从事件和event_time中删除行但从行中保留行的最简单方法是
执行此操作后,您只需从事件中删除一行,数据库引擎将删除event_time中的相关行。
delete from events where event_id = (?)
您需要使用INNODB引擎来强制执行外键约束。
说完这一切之后,在将event_id 5从所有其他表中删除后将其留在类别表中会很奇怪。
答案 1 :(得分:0)
您可能需要在代码中完成所有这些操作。如果数据库平台支持触发器,则可以使用触发器,还应该查看约束和级联选项。
例如,“on delete cascade”约束会自动处理删除事件的情况,因为它会为您删除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;
你是否需要处理只有一次的情况,如果在这种情况下保留事件?这取决于你。