使用 mysql 和 php 从表中删除

Posted

技术标签:

【中文标题】使用 mysql 和 php 从表中删除【英文标题】:delete from table using mysql and php 【发布时间】:2018-06-19 11:00:36 【问题描述】:

我必须创建一个 php 文件,该文件将从 mysql 数据库中删除一些行。

对于第一个版本,我有三个表:category_description、product_to_category 和 product_description。

如果产品属于给定类别(如笔记本电脑或手机),我必须从 product_description 表中删除这些产品。

问题是这个表只有 product_id 和 product_name 列。

product_to_category 表包含 product_id 和 category_id。

category_description 表有 category_id 和 category_name 列。

问题是我需要写一个php代码,函数如下。

在 category_description 表的 category_name 列中检查给定的类别名称(例如:智能手机)。如果找到它,则使用 category_id 列中的值编号(如 234)并将其与 product_to_category 表中可以找到的 category_id 进行比较。如果找到它,则使用来自 product_id 列的数据属于 if 并在 product_description 表的 product_id 列中检查它。如果匹配,则删除给定的行。

为此,我必须编写一个 php/sql 代码。不知道这种形式能不能做到。

到目前为止,我所做的是数据库连接和给定类别名称的 category_id 的定位,如下所示:

$sql = "SELECT category_id FROM category_description WHERE name = 'smartphone'";
$result = $conn->query($sql);

if ($result->num_rows > 0) 

    while($row = $result->fetch_assoc()) 
        echo "ID: " . $row["category_id"]. "<br>";
        $data[]=array('ID' =>$row["category_id"]);
        print_r ($data);
    

 else 
    echo "Not found";


【问题讨论】:

【参考方案1】:

这段代码对我有帮助

<?php
    $sql = "SELECT category_id FROM category_description WHERE name = 'smartphone'";
    if(!empty($cat = $conn->query($sql)->fetch_array()))
    
         $sql = 'SELECT * FROM product_category WHERE category_id = "'. $cat['category_id']. '"';
         $cat_products = $conn->query($sql)->fetch_all(PDO::FETCH_ASSOC);
         foreach($cat_products as $product)
         
             $sql = 'DELETE FROM product_description WHERE product_id = "'.$product['product_id'].'"';
             $conn->query($sql);
         
    

【讨论】:

谢谢我试过了,但我得到了以下错误:调用未定义的方法 mysqli_result::fetch() 适配mysqli驱动,我用的是PDO【参考方案2】:

您可以将DELETEJOIN 一起使用,如下所示:

DELETE product_description
FROM
category_description cd
JOIN product_to_category pc ON cd.category_id = pc.category_id
JOIN product_description as pd ON pd.product_id = pc.product_id
WHERE cd.category_name = 'smartphone'

【讨论】:

以上是关于使用 mysql 和 php 从表中删除的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 从表中删除所有行并将 ID 重置为零

在Mysql中使用SN从表中删除许多行

sql 使用Mysql中的ID从表中删除许多行

MySQL InnoDB 从表中删除数据行后未释放磁盘空间

从表中删除不会删除行

使用 SQLAlchemy 从表中删除记录