按id更新,返回不存在的id

时间:2014-01-18 11:27:37

标签: php mysql sql sql-update

我有一张包含产品的表格,它们都有一个唯一的ID。

ID | PRODUCT | PRICE | SKU
1  | Apple   | 10    | 1
2  | Banana  | 15    | 2

我想根据ID运行价格更新,但更新列表可能包含尚未在数据库中的产品。所以它需要返回无法更新或不更新的内容。

更新清单:

ID | PRODUCT   | PRICE | SKU
1  | Apple     | 15    | 1
3  | pineapple | 25    | 3

现在我需要它来更新ID 1,price = 15并返回ID 2尚未更新且ID 3不存在

这是由于以下内容,该网站销售轮胎,每年都有一个更新的定价清单,这是基于product_sku(不是product_id),但无论哪种方式都是唯一的。我需要更新新列表中所有的价格,并且返回列表中包含新列表但不是旧列表的ID,因此我们可以稍后添加这些列表并在数据库中有一个id列表但不是新列表,以便我们稍后可以删除它们(基于当前的库存水平)

如果分成多个步骤,我会想到这样的事情:

$updated_skus = array();
foreach ($update_products as $product) {
  UPDATE 'tyres' SET 'price' = '$product['price']' WHERE 'sku' = '$product['sku']';
  $updated_skus[] = $product['sku'];
}
$current_skus = SELECT 'sku' FROM 'tyres';

好了,现在这部分不在代码中,但想法就是这样,任何不在current_skus和updated_skus中的sku都是新的可能产品,反之亦然是旧产品。所以我需要返回2个列表,新产品,旧产品。

1 个答案:

答案 0 :(得分:1)

获取未更新的ID:

SELECT p.id
FROM products p
LEFT JOIN updates u ON p.id = u.id
WHERE u.id IS NULL

要获取不存在的产品,请撤消加入:

SELECT u.id
FROM updates u
LEFT JOIN products p ON u.id = p.id
WHERE p.id IS NULL
相关问题