2013-05-21 96 views
1

我有兩個MySQL表:從內刪除加入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的用戶。

E我知道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')"); 

我做了一個快速測試,它似乎工作 - 任何想法/批評?

+0

你是否想從'AllProducts'中的'ProductData'中存在'ProductNumber' * *的所有東西?查看錶格中的結果數據會很有幫助,因此我們知道查詢是否會執行該操作。 –

+0

是的,這是正確的! 如果需要,我可以添加更多樣本行 – Penindini

+0

如果您解決了您自己的問題,請考慮發佈答案(而不是編輯原始問題),以便其他人可以從中受益。如果您想要查看您的代碼或評論意見,請查看** [CodeReview](http://codereview.stackexchange.com)**,StackOverflow不是它的地方。 – peterm

回答

1

您使用的mysql_query被棄用PHP 5.5.0的,並會在將來被移除。您應該開始使用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和數據庫中,它屬於哪裏。

0
DELETE FROM ProductData 
     WHERE ProductNumber IN 
      (SELECT ProductNumber 
       FROM AllProducts 
       WHERE AccountId=100001 
       AND ProductOwner='Tom') 
+0

如果我沒有弄錯 - 這也會刪除我不想做的第3行(來自ProductData)。 – Penindini

+0

現在應該已經修復了。 – mzedeler