PHP - MySQL每周销售报告查询问题

时间:2014-08-15 06:31:52

标签: php mysql

我正在为特定卖家准备每周销售报告,这样他就可以在任何时候登录后看到。

使用以下代码收集当前周信息。

<?php 
$dt_week_start_date = date('Y-m-d 20:00:01',strtotime("last Saturday"));
$dt_week_end_date = date('Y-m-d 20:00:00',strtotime("next Saturday"));
?>

以下查询用于从当前一周的表格中获取特定卖家的待售商品数据。如果我只是在页面上显示已售商品列表,则此查询可以正常工作。

<?php
$str_query_select = "SELECT * FROM t_product_purchase ";
$str_query_select .= " WHERE purchasedatetime BETWEEN '".$dt_week_start_date ."' AND '".$dt_week_end_date."'";
$str_query_select .= " AND sellerpkid=1";
$str_query_select .= " ORDER BY purchasedatetime DESC ";
?>

但我需要按照以下方式显示销售商品。我尝试在购买时间字段上进行GROUP BY并尝试了一些其他的东西,但它根本不起作用。请帮我解决这个问题。

Purchase Date-Time       Product      Price
2014-08-10 14.20.00      Item 010      $50
2014-08-10 14.20.00      Item 016      $20
                         ------------------
                         Total :       $70
                         + Shipping :  $10
                         - Promo Code :$ 5
                         ------------------
                         Sub Total :   $75


2014-08-13 09.08.10      Item 056      $20
2014-08-13 09.08.10      Item 056      $65
2014-08-13 09.08.10      Item 056      $ 5
                         ------------------
                         Total :       $90
                         + Shipping :  $15
                         - Promo Code :$ 5
                         ------------------
                         Sub Total :   $100

Total For week 2014-08-09 to 2014-08-16 : $175

数据以下列方式存储在数据库表中。所有数据仅与单一卖家有关。

  • 买家01从运费为10美元的网站购买2件物品。促销代码折扣是5美元(因此在t_product_purchase表中添加了2个项目的2条记录以及运费和促销代码折扣)

  • 买家02从运费为15美元的网站购买3件物品。促销代码折扣是5美元(所以t_product_purchase表中添加了3个项目的3条记录以及运费和促销代码折扣)

这是数据库表结构:

CREATE TABLE IF NOT EXISTS `t_product_purchase` (
`purchasepkid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`sellerpkid` bigint(20) unsigned NOT NULL DEFAULT '0',
`productpkid` bigint(20) unsigned NOT NULL DEFAULT '0',
`prodcatpkid` bigint(20) unsigned NOT NULL DEFAULT '0',
`extendedprice` double(10,2) NOT NULL DEFAULT '0.00',
`shippingvalue` double(10,2) NOT NULL DEFAULT '0.00',
`discountpercentage` float(6,2) NOT NULL DEFAULT '0.00',
`discountamount` float(6,2) NOT NULL DEFAULT '0.00',
`finaldiscountedamount` float(6,2) NOT NULL DEFAULT '0.00',
`quantity` smallint(6) NOT NULL DEFAULT '0',
`color` varchar(255) DEFAULT NULL,
`size` varchar(255) DEFAULT NULL,
`emailid` varchar(255) NOT NULL DEFAULT '',
`firstname` varchar(100) DEFAULT NULL,
`lastname` varchar(100) DEFAULT NULL,
`address` varchar(255) DEFAULT NULL,
`city` varchar(100) DEFAULT NULL,
`state` varchar(100) DEFAULT NULL,
`country` varchar(100) DEFAULT NULL,
`zipcode` varchar(10) DEFAULT NULL,
`shippingaddress` text,
`specialnote` text,
`ipaddress` varchar(50) DEFAULT NULL,
`purchasedatetime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`purchaseday` int(11) DEFAULT '0',
`purchasemonth` int(11) DEFAULT '0',
`purchaseyear` int(11) DEFAULT '0',
PRIMARY KEY (`purchasepkid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

2 个答案:

答案 0 :(得分:1)

您可以修改您的查询以获取总价格,同时您还可以在PHP中执行其他附加功能,例如促销代码和促销代码。

这就是我的意思:

<?php
$str_query_select = "SELECT *, SUM(price_column) as gross_price FROM t_product_purchase ";
$str_query_select .= " WHERE purchasedatetime BETWEEN '".$dt_week_start_date ."' AND '".$dt_week_end_date."'";
$str_query_select .= " AND sellerpkid=1";
$str_query_select .= " GROUP BY purchasedatetime ORDER BY purchasedatetime DESC ";
?>

您现在可以进行添加和扣减:请注意:如果没有购买时间,您必须使用特定交易的唯一列进行分组。

Purchase Date-Time                     Price
2014-08-10 14.20.00      Gross Total : $70
                         + Shipping :  $10
                         - Promo Code :$ 5
                         ------------------
                         Sub Total :   $75


2014-08-13 09.08.10      Gross Total : $90
                         + Shipping :  $15
                         - Promo Code :$ 5
                         ------------------
                         Sub Total :   $100

Total For week 2014-08-09 to 2014-08-16 : $175

答案 1 :(得分:0)

顺便说一句,这不容易阅读吗?...

$str_query_select = "
SELECT * FROM t_product_purchase 
WHERE purchasedatetime BETWEEN '$dt_week_start_date' AND '$dt_week_end_date'
AND sellerpkid=1 
ORDER BY purchasedatetime DESC;
";