【问题标题】:PHP MSSQL weekly eventPHP MSSQL 每周活动
【发布时间】:2016-07-24 08:36:40
【问题描述】:

我有一个记录表。允许用户根据事件发生的日期输入数据。表格变成了这样:

ID  Date        Name      Hrs
1   2016-03-01  Username   8    
2   2016-03-02  Username   8    
3   2016-03-03  Username   9    
4   2016-03-04  Username   10       
…               
31  2016-03-31  Username   8    
  1. 我希望能够显示用户未输入的日期(即使没有记录)。
  2. 我还想显示表格中的所有记录,将它们分成几周。像这样的:

    Day Date Name Hrs

    Mon 2016-03-01  Username   8    
    Tue 2016-03-02  Username   8    
    Wed 2016-03-03  Username   9    
    Thu 2016-03-04  Username   10   
    Fri 2016-03-05  Username   10
    Sat 2016-03-06  -
    Sun 2016-03-07  Username   10
    
    Mon 2016-03-08  Username   8    
    Tue 2016-03-09  -
    Wed 2016-03-10  -   
    Thu 2016-03-11  -   
    Fri 2016-03-12  Username   10
    Sat 2016-03-13  -
    Sun 2016-03-15  Username   10
    
    ...
    ...
    ...
    
    Mon 2016-03-30  Username   8    
    Tue 2016-03-31  Username   8
    

下面是我的代码:

<?php

...Connection to DB...

$query="SELECT *
        FROM  Table_I
        ORDER BY DATEPART(wk,date) as wk
       ";

$params = array($_REQUEST['query']);
$results = sqlsrv_query($conn, $query, array(), array( "Scrollable" => 'static' ));

if($results===false)
 { die( FormatErrors( sqlsrv_errors() ) ); }

$rows = sqlsrv_num_rows($results);
$array = array();

while ($row = sqlsrv_fetch_array($results, SQLSRV_FETCH_ASSOC)) 
    { 
      $array[] = $row;

    }
?>

<html>
<head></head>
<body>

<table border="1">

<?php

        for($a=0; $a<$rows; $a++)
        {       
        echo '<tr><td>'.$array[$a]['wk'].'</td>';
        echo '<td>'.date("l", strtotime($array[$a]['date'])).'</td>';
        echo '<td>'.date('d M Y', strtotime(strip_tags($array[$a]['date']))). "</td>";
        echo '<td>'.strip_tags($array[$a]['name'])."</td>";
        echo '<td>'.strip_tags($array[$a]['hrs'])."</td>";

        }

</body>
</html>

它打印正常,但不包括用户未输入的日期,也没有将其分解为每周。我对编程很陌生,但它很有趣。

拜托,非常感谢您的帮助。

【问题讨论】:

  • 你用的是什么版本的sql-server?
  • @FLICKER Sql-server 2008
  • @Uday 你能帮忙吗?

标签: php sql sql-server


【解决方案1】:

您可以从以下查询开始。我相信你可以通过一些小的改变得到你想要的。

以下查询为您提供了缺失的日期。

;WITH numbers AS 
( 
 SELECT cast('2016-03-01' as date) AS num
 UNION ALL 
 SELECT dateadd(day, 1, num)
   FROM numbers  
     WHERE num < '2016-03-31'
) 
select num as MissingDate
from numbers
  left join yourEventTable on yourEventTable.Dt = numbers.num
where ID is null

使用上述查询,您可以按周数分组:

;WITH numbers AS 
( 
 SELECT cast('2016-03-01' as date) AS num 
 UNION ALL 
 SELECT dateadd(day, 1, num) FROM numbers  
     WHERE num < '2016-03-31'
) 
, dys as (
select num 
from numbers
)
select datepart(week, num), *
from dys 
  left join #events on #events.Dt = dys.num

下面的示例,

【讨论】:

  • 感谢您的回复,@FLICKER。不要生气,但是如何将其集成到我的代码中?再次感谢您的帮助。
  • 我认为您只需要执行查询并在其上循环并在 html 上呈现,就像您已经这样做了。
  • 首先运行两个查询并查看结果,然后您将弄清楚如何使用它
  • 再次感谢@FLICKER。您给我的查询中不包含表名。它怎么会知道我想要做什么?
猜你喜欢
  • 2012-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-11
  • 2022-11-01
  • 1970-01-01
相关资源
最近更新 更多