表名 - 收据表
coupondate - varchar
数据如下表所示。
coupondate customer
02-04-2015 A
02-05-2015 A
02-06-2015 A
02-07-2015 A
02-08-2015 A
02-09-2015 A
05-04-2015 B
05-05-2015 B
05-06-2015 B
05-07-2015 B
05-08-2015 B
05-09-2015 B
在上表中,学生A出现于2015年4月2日至2015年9月2日,所以我需要在02-04至02-09期间向学生A展示p。
在上表中,学生B出现于2015年4月5日至2015年9月5日,所以我需要在05-04至05-09期间向学生B显示p,就像明智...
预期输出
Customer 02-04 03-04 04-04 05-04 06-04 07-04 08-04 09-04 10-04 11-04 12-04 13-04 14-04 -15-04.....like wise upto 02-09
A P P P P P P P P P P P .......like wise upto 15-09
B P P P P P P P like wise....upto 05-09
但主要的是存在且缺席报告......
我需要使用query..bcoz获取所有数据某些where条件也在我的查询中..
for ex 如果我从2015年4月2日到2015年4月5日获取数据,那么此显示最多只会记录3天的过滤日期......
下面是我从db
获取数据的sql查询SELECT RE.*, DATEDIFF(MAX(STR_TO_DATE(RE.coupondate, '%d-%m-%Y')), MIN(STR_TO_DATE(RE.coupondate, '%d-%m-%Y'))) AS totaldiff
FROM receipt_entry RE LEFT JOIN city_master CM ON RE.city_name = CM.id WHERE CM.cityname = :cityname AND str_to_date(RE.coupondate,'%d-%m-%Y')
BETWEEN :fromdate AND :todate GROUP BY RE.receipt_no
代码下方的用于显示标题中的天数。
<?php
$startdate = $_POST['fromdate'];
$enddate = $_POST['todate'];
$start = date('d', strtotime($startdate));
$end=date('d', strtotime($enddate));
?>
<?php for ($x = $start; $x <= $end; $x++) { ?>
<th width="58%"><?php echo $x; ?></th>
<?php } ?>
代码下面的用于显示数据透视数据但未获得我的预期输出
<?php if (is_array($data)) { foreach($data as $row) { ?>
<tbody>
<tr>
<td><?php echo htmlspecialchars($row['customer_name']); ?></td>
<td><?php echo htmlspecialchars($row['startingdate']); ?></td>
<td><?php echo htmlspecialchars($row['coupondate']); ?></td>
<?php for ($x = $start; $x <= $end; $x++) { ?>
<?php if($row['coupondate'] == $x) { ?>
<?php
for ($i = 0; $i <= $row['totaldiff']; $i++)
{
?>
<td>1</td>
<?php } ?>
<?php } else { ?>
<td>-</td>
<?php } ?>
<?php } ?>
</tr>
<?php } }?>
</tbody>
</table>