我每天都会创建一个 SQL 表,该表是从供应商网站下载的,包含产品信息,位于csv
. 我所有的东西都创建好了,所有的表都是一样的。我需要解决的问题是我需要比较今天和昨天之间的表格(表格名称是以下格式的日期mm-dd-yyyy
)我需要比较几个不同的列来处理不同的事情。
- 我需要知道今天数据中没有昨天的所有产品(可以通过供应商 SKU 检查)
- 我需要知道昨天数据中不再存在的所有产品
- 我需要知道昨天的数据价格什么时候上涨
- 我需要知道价格从昨天的数据何时下跌
- 我需要知道根据昨天的数据何时开始销售以及何时停止销售
这些需要在表格中显示以下标签,这些标签将显示更改
定期向上 定期向下 杂项更改(描述更改或对非优先字段的更改)促销开启(从供应商处添加折扣)促销关闭(供应商取消折扣)删除(新列表中没有产品记录{可能已删除}) 新商品(新列表中的新产品记录)缺货 我一直在到处寻找这些问题的答案,并找到了一些东西,这些东西向我展示了如何使用 union 和 join 来做到这一点,但我没有t 完全了解如何基于此场景使用它们。
我尝试了不同的 PHP 解决方案,方法是遍历每条数据并在新表中搜索 sku,反之亦然,然后检查两个表中是否存在任何更改,但这需要很长时间,而且我有超过 200 000这些表中的产品。我希望我可以在更少的查询中完成这些,并让 sql 服务器比 php 脚本做更多的工作。
感谢所有的帮助!
昨天的表
__________________________________________________________
| id | price | sale | description | qty | sku |
---------------------------------------------------------
| 1 | 12.50 | 0.00 | description product 1 | 12 | 12345 |
| 2 | 22.99 | 20.99 | describe the problem | 1 | 54321 |
| 3 | 192.99 | 0.00 | description ftw | 5 | 53421 |
| 4 | 543.52 | 0.00 | description | 15 | 45121 |
----------------------------------------------------------
今天的表
__________________________________________________________
| id | price | sale | description | qty | sku |
---------------------------------------------------------
| 1 | 12.50 | 0.00 | description product 1 | 12 | 12345 |
| 2 | 22.99 | 0.00 | describe the problem | 1 | 54321 |
| 3 | 192.99 | 50.00 | description ftw | 5 | 53421 |
| 4 | 523.99 | 0.00 | description | 15 | 45123 |
----------------------------------------------------------
我需要新表如下所示
_____________________________________________________________
| id | sku | label | description | price |
-------------------------------------------------------------
| 1 | 54321 | promo off | describe the problem | 22.99 |
| 2 | 53421 | promo on | description ftw | 192.99|
| 3 | 45123 | new item | description | 523.99|
| 4 | 45121 | delete | description | 543.52|
-------------------------------------------------------------
以下是我目前拥有的已删除项目和新项目的代码。我在下面的示例中使用 int 作为标签/状态,只是表示不同的数字。
$deleted = mysql_query("SELECT * FROM `test1`") or die(mysql_error());
while($skus= mysql_fetch_array($deleted))
{
$query = mysql_num_rows(mysql_query("SELECT * FROM `test2` WHERE SKU='".$skus['sku']."'"));
if($query < 1)
{
$tata= mysql_query("INSERT INTO `gday` (Contract_Price, SKU, status) VALUES (".$skus['price'].", ".$skus['sku'].", 1)");
}
}
$deleted = mysql_query("SELECT * FROM `test2`") or die(mysql_error());
while($skus= mysql_fetch_array($deleted))
{
$query = mysql_num_rows(mysql_query("SELECT * FROM `test1` WHERE SKU='".$skus['sku']."'"));
if($query < 1)
{
$tata= mysql_query("INSERT INTO `gday` (Contract_Price, SKU, status) VALUES (".$skus['price'].", ".$skus['sku'].", 2)");
}
}
编辑:以下是所有数据将进入的真实表。我原本不想用大桌子弄脏水,但应要求我已将其包括在内。
ID
Status
DiscountDate
Price
Discount
DiscountEndDate
Desc1
Desc2
Desc3
Warranty
Qty1
Qty2
PricingUnit
PriceUpdate
Vendor
Category
UPC
Weight
WeightUnit