2016-04-04 12 views
0

私はレコードのテーブルを持っています。ユーザーは、イベントが発生した日付に基づいてデータを入力することができます。私は、ユーザーが入力していないこと(でも、レコードなし)日付を表示できるようにしたいPHP MSSQL週間イベント

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> 

それは大丈夫出力しますが、ユーザが入力していない日付が含まれていないとしません毎週それを分解してください。私は非常にプログラミングに新しいですが、それは楽しいですが。

お願いします。よろしくお願いいたします。

+0

あなたは、SQLサーバのどのバージョンを使用していますか? – FLICKER

+0

@FLICKER Sql-server 2008 – user

+0

@すぐにお願いしますか? – user

答えて

0

以下のクエリで開始することができます。私はあなたがほんの少しの変更によってあなたが望むものを得ることができると信じています。

以下の検索クエリはあなたに日付が不足しています。クエリの上に使用して

;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 

+0

あなたのお返事ありがとう@FLICKER。 怒らないでください。これを自分のコードにどのように組み込むのですか? もう一度お世話になります。 – user

+0

私はあなたがすでにそれをやっているので、クエリとループを実行してhtmlでレンダリングする必要があると思います。 – FLICKER

+0

最初に両方のクエリを実行して結果を確認すると、使用方法がわかります – FLICKER

関連する問題