用于显示数据透视数据的php / sql代码

时间:2015-05-19 11:59:24

标签: php mysql

表名 - 收据表

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>

0 个答案:

没有答案