2017-12-18 185 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

谢谢吨。有效。是的,我的结果集已经订购了。 –

相关问题