使用 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】:您可以将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'
【讨论】:
以上是关于使用 mysql 和 php 从表中删除的主要内容,如果未能解决你的问题,请参考以下文章