我有一个基于MySQL表的“定价历史记录表”。
因为我们有很多类似的清单,所以除了ItemID之外,其中许多条目都显示为重复项。
这是我目前清除重复项的方式(不是真正的重复项,而是具有相同SKU,Ymd日期,先前价格,新价格和销售渠道的类似清单。)-并尝试进行计数(请参见下面的$ count逻辑) )找到了多少个相同/“重复”的行)
$inventoryhistoryrows = array();
$skuarray = array();
foreach ($pricehistoryarray as $ph_key => $ph_values) {
// defining variables, etc.
. . . . .
$ph_sku_timestamp = $inventoryskus . ' ' . $ph_timestamp . ' ' . $ph_previousprice . ' ' . $ph_newprice . ' ' . $ph_channel;
if (in_array($ph_sku_timestamp, $skuarray)) { continue; }
$skuarray[] = $ph_sku_timestamp;
if(isset($prev)) {
$newcount = $count - $prev;
$prev = $count;
}
else {
$prev = $count;
$newcount = $count;
}
$ inventoryhistoryrows [] = array($ newcount,$ ph_itemid,$ inventoryskus,$ ph_previousprice,$ ph_newprice,$ ph_channel,$ ph_timestamp);
这正在工作....但是我的
$newcount
总是排在前面!这是表中输出的说明:
注意最左侧的箭头。 $ newcount变量是正确的,但整个第一列需要向上移动一行。
这意味着,
1
应该从第一行中删除。 3
应该在第一行。 17
应该在第二行。我当然可以看到第一行出现1的原因是此语句
else {
$newcount = $count;
}
这意味着第一行将始终返回1,因为
prev
不存在。但是我只是把它放在那儿,因为我不确定如何根据需要获取数据。有人对我该怎么做有任何想法吗?在
$pricehistoryarray
的初始foreach循环中(我想这会是更好的解决方案),或者是一种相对简单的方法,一旦构造了$inventoryhistoryrows
数组,它仅将第一列向上移动? 最佳答案
显然,这在MySQL查询中可能更好(请参见注释)
这似乎正在工作
SELECT COUNT(*) as count
, itemid
, previousprice
, newprice
, channel
, timestamp
FROM listing_price_history
WHERE listing_price_history.timestamp > DATE_SUB(now(), INTERVAL 30 DAY)
GROUP
BY previousprice
, newprice
, channel
, DATE(timestamp)
ORDER
BY listing_price_history.timestamp DESC
非常感谢@Cid的指导