2017-04-02 56 views
0

我有一個簡單的時間表MySQL表:結合/合併HTML錶行成一個從MySQL和PHP透視表

+-------------+--------------+------+-----+-------------------+-----------------------------+ 
    | Field  | Type   | Null | Key | Default   | Extra      | 
    +-------------+--------------+------+-----+-------------------+-----------------------------+ 
    | id   | int(11)  | NO | PRI | NULL    | auto_increment    |  
    | identity | int(11)  | NO | MUL | NULL    | 
    | start  | datetime  | YES | MUL | NULL    |        | 
    | end   | datetime  | YES | MUL | NULL    |  
    +-------------+--------------+------+-----+-------------------+-----------------------------+ 

我有一個PHP腳本:

$begin = new DateTime($_SESSION['start']); 
$end = new DateTime($_SESSION['end']); 
$interval = DateInterval::createFromDateString('1 day'); 
$period = new DatePeriod($begin, $interval, $end); 

foreach ($period as $dt) 
    $massivequery[]= "case(date(start)) when '".$dt->format("Y-m-d")."' then hour(timediff(end,start)) end as '".$dt->format("Y-m-d")."'"; 

$view_start = $_SESSION['start']; 
$view_end = $_SESSION['end']; 

$result = mysqli_query($con," 
select schedule.identity,".implode(',',$massivequery)." from schedule join names on schedule.id_code=names.id_code where schedule.away is null and schedule.errand is null and date(schedule.start) between '".$view_start."' and '".$view_end."' 
"); 

echo "<table align='center' border='1'>"; 

$i = 0; 
while($row = $result->fetch_assoc()) 
{ 
    if ($i == 0) { 
     $i++; 
     echo "<tr>"; 
     foreach ($row as $key => $value) { 
     echo "<th>" . $key . "</th>"; 
     } 
     echo "</tr>"; 
    } 
    echo "<tr>"; 
    foreach ($row as $value) { 
     echo "<td id='".$row['identity']."'>" . $value . "</td>"; 
    } 
    echo "</tr>"; 
} 
echo "</table>"; 

的問題是這給了我幾乎完美的桌子,我需要。它是可調整的,所有的表格標題都是正確的,但問題在於,它給出了一個人每天按照時間安排的獨立行。我想將具有相同ID的行合併爲一行。我不是指colspan或rowspan。 我得到

<table align="center" border="1"> 
<tbody> 
<tr><th>identity</th> 
<th>2017-03-20</th> 
<th>2017-03-21</th> 
<th>2017-03-22</th></tr> 

<tr><td id="12345">12345</td> 
<td id="12345">8</td> 
<td id="12345"></td> 
<td id="12345"></td></tr> 

<tr><td id="12345">12345</td> 
<td id="12345"></td> 
<td id="12345">8</td> 
<td id="12345"></td></tr> 

<tr><td id="12345">12345</td> 
<td id="12345"></td> 
<td id="12345"></td> 
<td id="12345">8</td></tr> 

</tbody></table> 

表中的表我想獲得,而不是

<table align="center" border="1"> 
<tbody> 
<tr><th>identity</th> 
<th>2017-03-20</th> 
<th>2017-03-21</th> 
<th>2017-03-22</th></tr> 

<tr><td id="12345">12345</td> 
<td id="12345">8</td> 
<td id="12345">8</td> 
<td id="12345">8</td></tr> 

</tbody></table> 

這裏這只是一個簡單的例子,用簡單的數據。我其實有40-50個不同的身份,通常的長度是30而不是3天。該查詢依賴於另一個應用程序,所以我必須能夠使用會話變量來說明時間段。這就是爲什麼我不能手動建立一個適當的MySQL查詢(或至少我不知道如何)。 再次,我敢肯定,有一種超級優雅和簡單的方法來做到這一點與jquery,但我沒有看到如何。

+0

再一次,簡單優雅的在mysql查詢編輯。 – Gusmar

回答

0

我只需編輯mysql查詢就可以工作。太簡單。現在

select schedule.identity,".implode(',',$massivequery)." from schedule join names on schedule.id_code=names.id_code where schedule.away is null and schedule.errand is null and date(schedule.start) between '".$view_start."' and '".$view_end."' group by schedule.identity 

我有一個完全動態的透視表:

我編輯這樣(分隔符 '+' 加入GROUP_CONCAT()函數):

$massivequery[]= "group_concat(case(date(start)) when '".$dt->format("Y-m-d")."' then hour(timediff(end,start)) end SEPARATOR ' + ') as '".$dt->format("Y-m-d")."'"; 

和這個(加入由基團) 。