最好的方法是什么?
我的表,Listings
+------------------+--------+-------+--------+
| Title | ItemID | SKU | Price |
+------------------+--------+-------+--------+
| Product Title #1 | 02439 | AE-SM | 100.00 |
| Product Title #2 | 04923 | BX-MM | 200.00 |
+------------------+--------+-------+--------+
此信息每天通过PHP脚本cron作业从电子商务平台API获取一次。
Shopify是一个简单的例子,因为可以从json编码的URL获取列表数据
//connect to mysql database
$connect = new mysqli($server, $username, $password, $database);
$connect->query('TRUNCATE ShopifyListings;');
$shopifylistings = file_get_contents('https://secret:key@my-store.myshopify.com/admin/products.json');
$productsjson = json_decode($productsfile, true);
foreach($productsjson['products'] as $products) {
// decode variables to insert
$sql = "INSERT INTO Listings (Title, ItemID, SKU, Price)
VALUES ('".$title."', '".$itemid."', '".$sku."', '".$price."')";
}
我的任务是跟踪列表中的价格变化。
我的第一个初步假设是创建一个新表Listings_history
+----+------------------+-----+-----------+-----------+
| id | Item_Identifier | SKU | old_Price | new_Price |
+----+------------------+-----+-----------+-----------+
然后创建一个触发器,例如
DELIMITER $$
CREATE TRIGGER 'pricing_History' AFTER INSERT ON 'Listings'
FOR EACH ROW
BEGIN
IF (NEW.Price <> OLD.Price) THEN
INSERT INTO Listings_history (Item_identifier, SKU, old_Price, new_Price) VALUES(ItemID, Title, OLD.Price, NEW.Price);
END IF
END;
$$
但当然这不起作用,因为我在插入新值之前使用TRUNCATE
语句删除表的内容,因此无法获得OLD.Price
。
我有什么选择?我想我可以创建一个PHP脚本,它使用SELECT语句并引用Listings
中的当前行,然后使用UPDATE
语句在需要时更新行,并使用DELETE
语句如果行/产品未列出(这样我可以使用上面的触发器)
创建像上面这样的TRIGGER
最好的方法吗?如果是这样,我是否必须修改如何将数据从Listings
语句输入INSERT
表到UPDATE
语句?
或者是否有更好的更有效的方法来跟踪价格变化?
答案 0 :(得分:0)
加载表后,使用如下查询计算所有价格变化:
select l.ItemID, l.Title, ph.new_Price, l.Price
from listings l left join
(select ph.*
from pricing_history ph
where ph.id = (select max(ph2.id)
from price_history ph2
where ph2.item_identifier = ph.item_identifier
)
) ph
on l.item_identifier = ph.item_identifier
where ph.new_Price is null or ph.new_price <> l.price;
您可以在此之前添加insert
并将所有内容一次性插入。
注意:我希望历史记录表中有日期/时间。
编辑:
对于性能,price_history(item_identifier, id)
上的索引会有所帮助。
类似的解决方案不是使用价格历史记录,而是将shopifylistings
复制到last_shopifylistings
并使用它代替price_history
。然后不需要用于获得最近价格变化的子查询。