1

我有两个 MySQL 表:

Table AllProducts  
AccountID, ProductOwner, ProductNumber  
100001, Tom, ABC1  
100001, Tom, ABC2  
100001, Greg, ABC3  
100002, Charlie, ABC2  

Table ProductData  
AccountID, ProductNumber, ProductDesc  
100001, ABC1, DescHere  
100001, ABC2, DescHere  
100001, ABC3, DescHere  
100002, ABC2, DescHere  

我需要从 ProductData 中删除两个表中 ProductNumbers 相同的所有内容,并且我将使用变量指定 AccountID 是什么以及 ProductOwner 是谁。

例如,我知道 AccountID 是 100001,ProductOwner 是 Tom。因此,我希望仅删除 ProductData 表中的第 1 行和第 2 行。

编辑:我相信我可能刚刚破解了我一直在处理的查询

mysql_query("DELETE ProductData.* FROM ProductData  
  INNER JOIN AllProducts ON ProductData.ProductNumber = AllProducts.ProductNumber  
    WHERE (ProductData.AccountID = '100001'  
      AND AllProducts.ProductOwner = 'TOM')");

我做了一个快速测试,它似乎有效 - 有什么想法/批评吗?

4

2 回答 2

1

自 PHP 5.5.0 起,您对 mysql_query 的使用已被弃用,并将在未来被删除。您应该开始使用MySQLiPDO_MySQL扩展。

我会进一步建议您存储您的查询:

  DELETE ProductData.* FROM ProductData  
  INNER JOIN AllProducts ON ProductData.ProductNumber = AllProducts.ProductNumber  
    WHERE (ProductData.AccountID = '100001'  
      AND AllProducts.ProductOwner = 'TOM'

在数据库上的存储过程中。

例如,当使用 PDO 时,您可以按如下方式调用它:

    $db = new PDO('mysql:host=xxx;port=xxx;dbname=xxx', 'xxx', 'xxx', array( PDO::ATTR_PERSISTENT => false));

    // Be sure to cleanse the passed in arguments!
    $stmt = $db->prepare("CALL deleteProductData($accountId, $productOwner)");

    // call the stored procedure
    $stmt->execute();

存储过程示例:

CREATE DEFINER=`root`@`localhost` PROCEDURE `deleteProductData`(IN `accountId` BIGINT, IN `productOwner` VARCHAR(128))
    LANGUAGE SQL
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
    DELETE FROM ProductData  
        INNER JOIN AllProducts ON ProductData.ProductNumber = AllProducts.ProductNumber  
        WHERE ProductData.AccountID = accountId AND AllProducts.ProductOwner = productOwner;
END

这样,您就可以将所有 MySQL 代码从 php 移到它所属的数据库中。

于 2013-05-22T01:31:08.937 回答
0
DELETE FROM ProductData 
      WHERE ProductNumber IN 
            (SELECT ProductNumber
               FROM AllProducts
              WHERE AccountId=100001
                AND ProductOwner='Tom')
于 2013-05-21T23:34:15.003 回答