- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个 PHP 脚本可以从 API 获取特定商品的价格。该脚本由每 5 分钟运行一次的 cron 作业执行。商品的价格大部分时间保持不变,一天只变动 4 或 5 次左右。
目前我的表结构是这样的:
CREATE TABLE IF NOT EXISTS `product_details` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`start` datetime NOT NULL,
`end` datetime NOT NULL,
`price` decimal(11,2) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=38 ;
在前端,我想显示各个时期的价格。所以如果价格在一天内变化了3次,就会有3个时间段,以及相应的价格。
例子:
2015-05-31 01:55:00 PM to 2015-05-31 04:25:00 PM
Price = $22.33
2015-05-31 04:25:00 PM to 2015-05-31 08:25:00 PM
Price = $33.54
2015-05-31 08:25:00 PM to 2015-05-31 10:25:00 PM
Price = $37.37
如果我每次执行脚本时都插入一条新记录,那么一天就会有 200 多条记录,而且很快就会变得困惑。因此,仅当获取的价格与前一个价格不同时,我才执行 INSERT 查询。
现在我的脚本是这样的:
$last_row = get_last_low();
$current_price = get_current_price();
if ($last_row['price'] == $current_price)
{
UPDATE product_details SET `end`=%s ORDER BY id DESC LIMIT 1;
}
else
{
INSERT INTO product_details (`start`, `end`, `price`)
VALUES (NOW(), NOW(), $current_price)
}
foreach (get_all_records() as $item)
{
display();
}
如果用户指定,我想在每个条目旁边显示价格的增加/减少。我是否应该在表中添加另一个 value_increased
字段?我完全不知道如何以尽可能最好的方式正确构建表格,所以我以后不必回头看。
你会如何改变它? (我刚刚发布了我的方法来展示我到目前为止所做的尝试;您的回答不一定要坚持下去。我对任何想法都持开放态度,只要它比我的 hack 更好。)
最佳答案
由于您在执行 INSERT 时已经有了之前的价格和新的价格,因此您可以轻松计算出 value_increased 并将其存储起来。所以基本上是的,在表中添加另一个 value_increased 字段。
如果您跟踪代码中的最后一次运行时间,而不是每次查询 API 时都更新“结束”,您可以在 INSERT 之前更新它一次(在初始 INSERT 时将其设置为 NULL)。
有点像
$last_row = get_last_low();
$current_price = get_current_price();
if ($last_row['price'] != $current_price)
{
UPDATE product_details SET `end`=%s WHERE 'end' IS NULL;
INSERT INTO product_details (`start`, `end`, `price`)
VALUES (NOW(), null, $current_price)
}
此外,如果您显示所有商品的当前价格,您的查询会变得更加简单 - 类似于
SELECT * FROM product_details WHERE 'end' IS NULL;
而不是更复杂的东西(有多个产品,你必须得到最新的'结束'然后再次加入才能得到相应的价格。当然,如果你是唯一要做的就是显示所有记录,这不会是一个太大的因素。
单个 UPDATE 意味着您访问数据库的次数也会少得多(即价格变化的次数,而不是访问 API 的次数)
缺点
缺点是,如果您的应用程序崩溃,您将不知道上次获得价格的时间(如果必须跟踪每个价格,您基本上必须一直在 API 端查询数据库您最后的 PRICE 已更改。例如
1.00 PM $1.1
1.15 PM $2.0
1.30 PM $2.0
1.45 PM $2.0
--- application crash ----
使用您当前的程序,您的数据库将拥有
1.00 PM $1.1
1.45 PM $2.0
因此,对于错误恢复,您基本上需要在 API 中查询下午 1 点 45 分之后的所有价格变化。使用修改后的程序,您的数据库将拥有
1.00 PM $1.1
NULL $2.0
因此,要进行错误恢复,您必须在 API 中查询下午 1 点后的所有价格变化。请注意,在这两种情况下,API 返回的记录数是相同的,只是 API 的重新运行有一个略微(取决于上次价格变化的时间)更大的数据集要过滤掉。
关于php - 每 5 分钟跟踪一次特定商品价格的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30557128/
我想在 WooCommerce 中显示我的缺货商品,但没有价格。有什么简单的方法可以隐藏“缺货”商品的价格吗? 谢谢! 最佳答案 将这些添加到 CSS 对我有用。第一个从缺货商品页面中删除价格,第二个
我是一名优秀的程序员,十分优秀!