【问题标题】:How to delete one row from a table and multiple rows on another that are related?如何从表中删除一行并在另一表上删除相关的多行?
【发布时间】:2014-01-11 22:01:48
【问题描述】:

我有两张桌子:

图片

post_id     user_id     post_text     post_time
----------------------------------------------------------
1           1           TEXT          2014-01-12 11:07:00
2           2           TEXT          2014-01-12 12:10:00

点击

clicked_id        post_id        user_id 
-----------------------------------------
1                 1              1       
2                 1              2       
3                 2              1        

每当单击图像时,使用 ajax,我都会将此类单击添加到单击的表中,并将其与单击图像的用户和单击的帖子相关联。这正是这些表格的用途。

真正的问题是:

我使用每分钟运行的事件删除早于服务器** CURRENT_TIMESTAMP 的图片。如何删除通过两个表的 post_id 与此类图像关联的 clicks

这是当前正在运行的事件,仅删除早于 CURRENT_TIMESTAMP 的图像:

DELETE * FROM images WHERE post_time <= CURRENT_TIMESTAMP;

**帖子的日期设置为将来的日期

有人能以正确的方式引导我吗?那将不胜感激。 谢谢。

【问题讨论】:

  • 执行此操作的最佳方法ALTER TABLE your_table ADD CONSTRAINT delete_image_clicks FOREIGN KEY (picture_id) REFERENCES clicks_table(id) ON DELETE CASCADE;
  • @MKhalidJunaid,这超出了我自学的范围。你能详细说明这会做什么吗?
  • 您正在尝试删除单张图片的引用,使用级联删除Read MySQL ON DELETE CASCADE Deletes Data From Multiple Tables,您需要更改您的图片表并使用级联删除定义点击表的外键,所以当您尝试删除图片mysql会注意删除要删除图片的点击
  • @MKhalidJunaid,非常感谢。那篇文章帮助我解决了问题,再次感谢您。
  • 你也可以使用join

标签: mysql sql database database-design relational-database


【解决方案1】:
    declare @CurTime datetime = CURRENT_TIMESTAMP

    delete from C
    from Images I 
    join Clicked C
    on C.post_ID = I.post_ID
    where I.post_time <= @CurTime

    delete from Images 
    where post_time <= @CurTime

对于 MS SQL 来说是这样。不要在 MySQL 中尝试

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-16
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    相关资源
    最近更新 更多