PHP - MS SQL HTML - 在一行中显示每个客户的所有月份

Posted

技术标签:

【中文标题】PHP - MS SQL HTML - 在一行中显示每个客户的所有月份【英文标题】:PHP - MS SQL HTML - Show all months per customer in one row 【发布时间】:2018-03-15 00:05:03 【问题描述】:

希望你能在我的新问题中启发我,让我知道我可能错在哪里。

这是我的场景:

我需要显示每个客户的销售报告。所以一位顾客,一排。 在那一行中,所有月份也应该在那里。这是要清楚的屏幕截图:

想要的结果

正如您在屏幕截图中看到的那样,所有月份都在那里。

这是我的 SQL 查询:

select	CustNm as company,
		Cust as customer,
		Cust as custCode,
		Mon,
		case
		when Mon = 1 THEN 'January'
		when Mon = 2 THEN 'February'
		when Mon = 3 THEN 'March'
		when Mon = 4 THEN 'April'
		when Mon = 5 THEN 'May'
		when Mon = 6 THEN 'June'
		when Mon = 7 THEN 'July'
		when Mon = 8 THEN 'August'
		when Mon = 9 THEN 'September'
		when Mon = 10 THEN 'October'
		when Mon = 11 THEN 'November'
		when Mon = 12 THEN 'December'
		end as 'month',
		Yr as 'year',
		Mon as monthCheck,

		case
		when NetSales IS NULL THEN 0
	    else NetSales
	    end as netSales,

		case
		when PrvYrSales IS NULL THEN 0
	    else PrvYrSales
	    end as prevYearSales,

		case
		when SalesGrwth IS NULL THEN 0
	    else SalesGrwth * 100
	    end as salesGrowth,

		case
		when YrBfrLst IS NULL THEN 0
	    else YrBfrLst
	    end as yearBeforeLast,

		case
		when BfrLstGrwth IS NULL THEN 0
	    else BfrLstGrwth * 100
	    end as yearBeforeLastGrowth

from	BigEMasterData.dbo.monthtmp as a

		left outer join BigESales.dbo.tbl_ReportCOMPANYperCust as b
	    on b.Mon = a.monthNo

where CompBrnch =  @companyBranch
and Yr = @year

group by CustNm,
		 Cust,
		 Mon,
		 Yr,
		 NetSales,
		 PrvYrSales,
		 SalesGrwth,
		 YrBfrLst,
		 BfrLstGrwth

order by CustNm asc, Mon asc

这是该查询的结果:

如您所见,每个月都是每行。我想创建一个对客户和月份进行分组的数组。如果你能在我的 php 代码中看到,我已经可以做到了。但问题是如果没有特定月份的数据怎么办。

这是我的 PHP 代码:

<?php
$data['companyInfo'] = $this->salesmodel->fetchCustomers($this->input->post('company'), $this->input->post('year'));
$outer_array = [];
$unique_array = [];
foreach($data['companyInfo'] as $key => $value) 
  $inner_array = [];
  $customer = $value['customer'];
  if(!in_array($value['customer'], $unique_array)) 
    array_push($unique_array, $customer);
    unset($value['customer']);
    array_push($inner_array, $value);
    $outer_array[$customer] = $inner_array;
   else 
    unset($value['customer']);
    array_push($outer_array[$customer], $value);
  


?>
该php代码的输出是:

现在这是我面临的挑战:

    如何在html中实现DESIRE RESULT 如果没有特定月份的数据,我只想在 html 中显示一个空白单元格。请查看结果集,有些客户没有特定月份的数据。我必须显示从 1 到 12 的月份。但是如果没有数据,我想显示一个空白单元格()。

我希望我清楚地解释了自己。我正在使用 Codeigniter/PHP。和 MS SQL。我不能让它专门显示一排的月份。我可以做基本的表格,但这是不同的。

任何建议将不胜感激。谢谢。

【问题讨论】:

请将您的解决方案作为自己的答案发布,而不是作为编辑。 【参考方案1】:

您应该使用 foreach 遍历所有月份并将您的第一个 tr 设置为月份列。然后,为每个 col 执行另一个 sub foreach 循环以显示每个月的 td items 内容。这应该使用 PHP 代码而不是串联查询来完成。这将是我的简单方法和更好的性能。

【讨论】:

你好@CarpinchoDem,我已经硬编码了月份标题,因为它总是固定的。如果那个月没有销售数据,我会遇到问题。例如,我硬编码了 1 月 - 12 月。如果 3 月的销售数据我将显示空白 。我无法解决的部分是我如何知道数据库中是否缺少月份。希望我解释清楚。 创建一个以 $data 为参数的函数。 if ($data =! "") =$data?> else (这是伪代码,如你所见...) 嗨,谢谢。我已经解决了。我花了 1 周时间来解决这个问题。 :(

以上是关于PHP - MS SQL HTML - 在一行中显示每个客户的所有月份的主要内容,如果未能解决你的问题,请参考以下文章

PCB SQL MS 将多行有序数据转为一行数据(一列转一行)

如何将 QNAP Web 服务器连接到 Microsoft MS SQL

MS SQL - 在特定行之前/之后获取

如何在 php 中为 tsql 字符串转义单引号(ms sql)

将 php 连接到 MS SQL Server 2008

PHP - 访问 MS SQL 视图和回显结果