使用mysql和php从表中删除

时间:2018-01-10 09:55:05

标签: php mysql database mysqli

我必须创建一个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_name列中的category_description表中检查给定的类别名称(例如:智能手机)。如果找到它,则使用category_id列中的值数字(如234),并将其与product_to_category表中可以找到的category_id进行比较。如果找到它,则使用data_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";

}

2 个答案:

答案 0 :(得分:0)

此代码可以帮助我思考

<?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);
         }
    }

答案 1 :(得分:0)

您可以DELETE使用JOIN,如下所示:

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'