2017-12-18 184 views
1

我試圖以下面顯示的格式從數據庫中回顯數據;PHP-PostgreSQL將數據放入一個單元格(HTML表格)

|column-1|column-2|column-3|column-4|column-5| 
|--------|--------|--------|--------|--------| 
|My Name | Date |Message | People |Phone #s| 
          | People |Phone #s| 
          | People |Phone #s| 
          | People |Phone #s| 
          | People |Phone #s| 

這意味着,我從數據庫中選擇數據是這樣的,在第4列的人,5接收到的消息(列3)從人上柱1。但根據我的代碼來回應數據庫中的數據,我爲第4列和第5列中的每個其他人列出了一個新列,如下所示;

|column-1|column-2|column-3|column-4|column-5| 
|--------|--------|--------|--------|--------| 
|My Name | Date |Message | People |Phone #s| 
|My Name | Date |Message | People |Phone #s| 
|My Name | Date |Message | People |Phone #s| 
|My Name | Date |Message | People |Phone #s| 
|My Name | Date |Message | People |Phone #s| 

下面是我的php代碼,生成表;

echo "<table id='table'>"; 
while($row=pg_fetch_assoc($result)){echo "<tr>"; 
echo "<td align='left' width='200'>" . $row['message_by'] . "</td>"; 
echo "<td align='left' width='200'>" . $row['message_date'] . "</td>"; 
echo "<td align='left' width='200'>" . $row['message_text'] . "</td>"; 
echo "<td align='left' width='200'>" . $row['phone_number'] . "</td>"; 
echo "<td align='left' width='200'>" . $row['recipient_name'] . "</td>"; 
echo "</tr>";} 
echo "</table>"; 

所以,問題是如何能夠我輸出列4和5點的數據到單個單元或可替代地,回聲出的數據到不同的小區而不必重複列1至3?

+0

存儲(例如)message_by的前一個值,如果在下一個循環中它是相同的值 - 不輸出它。 –

+0

使用'td'的'rowspan'和'colspan'' attr'。 – adeltahir

+0

'rowspan'和'colspan'將要求我爲它們分配一個數字,我怎樣才能根據從db返回的人數動態地實現它? –

回答

1

解決您的問題的典型方法是構建一個小型狀態機,用於跟蹤列值的變化。就你而言,看起來如果前三列中的任何值發生改變,那麼你想打印一個完整的記錄。否則,只需打印最後兩列。下面使用的技巧是我們總是放下5 <td>標籤,但對於重複行,我們只將空字符串分配給這些單元格。

$col1 = NULL; 
$col2 = NULL; 
$col3 = NULL; 
echo "<table id='table'>"; 
while ($row = pg_fetch_assoc($result)) { 
    $text1 = ''; 
    $text2 = ''; 
    $text3 = ''; 
    if ($row['message_by'] != $col1 || 
     $row['message_date'] != $col2 || 
     $row['message_text'] != $col3) { 
     $col1 = $row['message_by']; 
     $col2 = $row['message_date']; 
     $col3 = $row['message_text']; 
     $text1 = $col1; 
     $text2 = $col2; 
     $text3 = $col3; 
    } 
    echo "<tr>"; 
    echo "<td align='left' width='200'>" . $text1 . "</td>"; 
    echo "<td align='left' width='200'>" . $text2 . "</td>"; 
    echo "<td align='left' width='200'>" . $text3 . "</td>"; 
    echo "<td align='left' width='200'>" . $row['phone_number'] . "</td>"; 
    echo "<td align='left' width='200'>" . $row['recipient_name'] . "</td>"; 
    echo "</tr>"; 
} 
echo "</table>"; 

重要:這個答案只會工作,纔有意義,如果你的Postgres的查詢排序利用ORDER BY結果集。特別是,查詢應該已經排序,首先排序三個消息列。

+0

謝謝噸。有效。是的,我的結果集已經訂購了。 –

相關問題