我有一个脚本,以检查一些产品的销售价格在网站上每天,并希望将它存储在一个MySQL数据库。
有一个存储productID、名称、属性等的产品表。我想出了两种构造销售价格表的方法。
。
哪条路更好?我认为第一种方法每天保存大量重复的数据。第二种方法是,如何将源数据与在售价格表进行比较,只插入新的,更新现有的ToDate,而忽略其余的?是否需要更多的资源来处理这样的数据?FromDate和ToDate是否会使将来的查询难以构建,或者执行速度较慢?我正在考虑的查询类型是,在给定的日期范围内,查找销售价格的第一个开始日期,在给定的日期范围内查找产品销售的总天数,确定产品在售或不在销售时的总天数,例如,给出日期范围。我对MySQL非常陌生,所以没有检查高级查询。
谢谢!
发布于 2020-08-08 16:10:58
我会采用第二种方法,因为它在节省内存和用例方面更有意义。现在针对你们的每一个问题:
问:如何将源数据与销售价格表进行比较,只插入新的,更新现有的ToDate,而忽略其余的?
答:您可以比较销售价格表和源数据之间的SalePrice (相同的productID ),其中可以从销售价格表( ToDate为null)中获得productID的最新记录。查看它的另一种方法是,您只从具有与销售价格表中的值不同的SalePrice值的源数据中查询产品,或者产品尚未插入到销售价格表中,而是在新的源数据中(新产品,附带日常数据)。
问:像这样处理数据需要更多的资源吗?答:是的,但这并不意味着你将花费大量的计算能力,这只是一些逻辑,而不是旧的insert into table select * from another_table。您将节省内存,因此必须进行权衡。当您使用SQL分析您的表时,就不必进行聚合(就像使用方法1一样),这样就节省了一些计算能力。
问: FromDate和ToDate是否会使将来的查询难以构建,或者执行速度较慢?答:假设您想在特定的日期( -> )获得产品的价格,productId = your_productID和your_desired_date介于DateFrom和DateTo之间,假设您想知道某些产品的销售价格随着时间的变化,productId = your_productID,等等on...So,这取决于您的SQL技巧,我认为这不会有那么困难。对于方法1,您将不得不进行聚合,而对于方法2,您将不得不更多地使用时态逻辑。
问:我正在考虑的查询类型是,在给定的日期范围内,找到第一个开始销售价格的日期,在给定的日期范围内查找产品的总销售天数,确定产品在售或不在销售的时间,例如,给出一个日期范围。
答:我认为如果您使用设计方法2,如果您的用例是要找到销售价格的第一个开始日期(对于第一种方法,您必须使用聚合函数MIN()),那么您的查询将更有性能。另外,如果您想要获得总天数(因为您使用了DATEDIFF(DateFrom,DateTo) ),那么查询的性能就会更好--如果您想要获得总天数,请参阅psevdo代码--请参阅MySQL文档中的一个函数,该函数查找日期之间的天数差异。如果您想知道某产品是否正在销售,或者不在日期范围内,那么方法2将比方法1更麻烦,但不是很多。您只需查看您的表中是否有日期范围内的产品记录,如果没有,则该产品不在销售中,否则该产品正在减价。
结论:我将采用方法2.
https://stackoverflow.com/questions/63317330
复制相似问题