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 月的销售数据我将显示空白以上是关于PHP - MS SQL HTML - 在一行中显示每个客户的所有月份的主要内容,如果未能解决你的问题,请参考以下文章
PCB SQL MS 将多行有序数据转为一行数据(一列转一行)
如何将 QNAP Web 服务器连接到 Microsoft MS SQL