0

我有一张名为“议程”的表//翻译:乳制品

具有以下行:

idagenda // primary key
title
waar
organisatie
...
etc.
...

我还有一张名为议程数据的日记项目/事件日期的表格

具有以下行:

id // primary key
idagenda // id from other table
van //from
tot // till
datum // date

当字段“tot”是今天的日期时,它将从数据库中删除行,但“议程”表中的行保持不变。他们没有被删除,因为我没有打电话给他们。

我的删除查询如下所示:

DELETE FROM agendadatum WHERE tot < NOW(); 

如何从“议程”表中删除与议程数据中的外键相同的行?

4

3 回答 3

0

在您的创建表中,您需要提及外键约束,例如

FOREIGN KEY (product_id) REFERENCES products (id)
       ON DELETE CASCADE
       ON UPDATE CASCADE,

之后,如果您运行删除查询,将自动删除行,这是引用表的 id

您可以查看级联删除中的说明

于 2013-08-22T13:16:58.543 回答
0

如果您使用的是php,您可以尝试以下操作

//get all agentadatum data with date now and before
$select_agendadatum = mysql_query("SELECT * FROM agendadatum WHERE tot <= NOW()") or die (mysql_error());
//loop through rows
while($row_agendadatum = mysql_fetch_assoc($select_agendadatum))
{
     //delete agendadatum row
     $delete_agendadatum = mysql_query("DELETE FROM agendadatum WHERE id = '".$row_agendadatum['id']."'") or die (mysql_error());
    //delete agenda row
    $delete_agenda= mysql_query("DELETE FROM agenda WHERE idagenda = '".$row_agendadatum['idagenda']."'") or die (mysql_error());
}

如果您的逻辑每个代理接受多个议程数据,您可以在删除代理之前简单地计算特定代理中是否有超过 1 个议程数据...

希望这可以帮助

于 2013-08-22T13:27:03.897 回答
0

您可以在一个查询中从多个表中删除:

DELETE agenda.*, agendadatum.*
FROM agenda
JOIN agendadatum USING (idagenda)
WHERE tot < NOW();

这将从议程和议程数据中删除行,并且仅删除与条件匹配的行(如果您替换为查询返回的相同行DELETESELECT

于 2013-08-22T14:23:19.227 回答