我有一张名为'agenda'的表//翻译:dairy
包含以下行:
idagenda // primary key
title
waar
organisatie
...
etc.
...
我还有一个日历项目/事件日期表名为agendadatum
包含以下行:
id // primary key
idagenda // id from other table
van //from
tot // till
datum // date
当字段'tot'是今天的日期时,它将从数据库中删除行,但'agenda'表中的行保持不变。它们没有被删除,因为我没有给它们打电话。
我的删除查询如下所示:
DELETE FROM agendadatum WHERE tot < NOW();
如何从'agenda'表中删除与agendadatum中的外键具有相同ID的行?
答案 0 :(得分:0)
在您的create table中,您需要提及外键约束,如
FOREIGN KEY (product_id) REFERENCES products (id)
ON DELETE CASCADE
ON UPDATE CASCADE,
之后如果您运行删除查询,将自动删除行,这将引用表的ID
您可以查看delete on cascade
中的说明答案 1 :(得分: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());
}
如果您的逻辑接受每个agenta多个agendadatum,您可以在删除agenta之前计算特定agenta中是否有超过1个agendadatum ...
希望这会有所帮助
答案 2 :(得分:0)
您可以在一个查询中删除多个表:
DELETE agenda.*, agendadatum.*
FROM agenda
JOIN agendadatum USING (idagenda)
WHERE tot < NOW();
这将删除agenda和agendadatum中的行,并且仅删除符合条件的行(如果您将DELETE
替换为SELECT
,则查询返回的行数相同。)