我正在建立具有类别的画廊,并且对该主题有疑问。
仅2张桌子。 第一个表具有类别
第二张表有照片数据。 第二个表具有第一个表中的category_id。 很简单...
现在,当我删除类别时,我想使用category_id = NULL ot =''更新第二张表。 有可能吗?
我尝试使用触发器,但没有成功。出现语法错误...
$sql = "
CREATE TRIGGER update_gal_items AFTER DELETE ON gallery_category
FOR EACH ROW
BEGIN
UPDATE gallery_photos SET photo_category='' WHERE photo_category=$id;
END
";
请帮忙吗?
答案 0 :(得分:2)
ALTER TABLE gallery_photos
ADD FOREIGN KEY (photo_category) REFERENCES gallery_category(category_id)
ON DELETE SET NULL
请注意,我假设category_id
作为父表中的字段名称(gallery_category)。
现在,如果您仍然想使用Triggers,请在gallery_category
表上定义以下触发器:
DELIMITER //
DROP TRIGGER IF EXISTS gallery_category_delete_trigger //
CREATE DEFINER=`root`@`localhost` TRIGGER gallery_category_delete_trigger
AFTER DELETE ON gallery_category
FOR EACH ROW
BEGIN
UPDATE gallery_photos
SET photo_category = NULL
WHERE photo_category = OLD.category_id;
END //
DELIMITER ;
答案 1 :(得分:0)
很好地运行不同查询可以解决问题...
global $conn;
if( isset( $_POST['cat_id'] ) ) {
$id = (int)$_POST['cat_id'];
}
$sql = "UPDATE `gallery_photos` SET `photo_category` = '' WHERE `photo_category` = ?";
$stmt1 = $conn->prepare( $sql );
$stmt1->bind_param('i', $id);
$stmt1->execute();
if (! $stmt1) {
$this->log->error ( "Mysqli prepare error: " . mysqli_error ( $conn ) );
throw new MysqliExecuteException ( "Mysqli error: " . mysqli_error ( $conn ) );
}
$sql_n = "DELETE FROM `gallery_category` WHERE `category_id` = '$id'";
$stmt = $conn->prepare($sql_n);
$stmt->execute();
if (! $stmt) {
$this->log->error ( "Mysqli prepare error: " . mysqli_error ( $conn ) );
throw new MysqliExecuteException ( "Mysqli error: " . mysqli_error ( $conn ) );
}
感谢大家的宝贵时间。 :)