我有一张包含产品的表格,它们都有一个唯一的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个列表,新产品,旧产品。
答案 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