2016-04-04 3 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-Server вы используете? – 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

Смежные вопросы