2016-04-04 19 views
0

Kayıtlarım var. Kullanıcının, olayın gerçekleştiği tarihe göre veri girmesine izin verilir.PHP MSSQL haftalık olayı

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. Ben tarihi görüntülemek için mümkün istiyorum (hatta kayıtları olmadan) kullanıcı giremediklerini: Tablo böyle bir şey haline gelir.
  2. Ayrıca tablodaki tüm kayıtları haftalara ayırmak istiyorum. Böyle bir şey: Aşağıda

    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 
    

benim kodudur:

<?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> 

Geçti yazdırır ancak kullanıcı girmediniz tarihleri ​​içermez ve yok her haftaya bölün. Programlamada çok yeniyim ama yine de eğlenceli.

Lütfen yardımın büyük beğeni topladı.

+0

kullandığınız sql sunucusu hangi sürümünü? – FLICKER

+0

@FLICKER Sql-server 2008 – user

+0

@Uday Yardımcı olabilir misiniz? – user

cevap

0

Aşağıdaki sorgu ile başlayabilirsiniz. Bazı küçük değişikliklerle istediğini alabileceğine inanıyorum.

Sorgulamada eksik tarihler var.

;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 

Eğer hafta sayısına göre, sorguya yukarıdaki grubu olabilir kullanılarak: numunenin altında olan

;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

Yanıtınız için teşekkür ederiz, @FLICKER. Kızma, ama bunu koduma nasıl eklerim? Yardımlarınız için tekrar teşekkürler. – user

+0

Sanırım sadece sorguyu yürütmek ve üzerinde döngü yapmak ve bunu zaten yaptığınız gibi html üzerinde işlem yapmanız gerekir. – FLICKER

+0

İlk önce her iki sorgusu da çalıştırın ve sonucu görün, sonra nasıl kullanabileceğinizi öğreneceksiniz. – FLICKER