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

는 I 데이터베이스로부터 선택하고있어, 데이터 열 (4)의 사용자는, 5 열 1의 사용자로부터 메시지 (컬럼 3)를 수신하도록한다. 그러나 db의 데이터를 에코하는 코드에 따르면 아래 열과 같이 열 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 코드입니다. I는 3 열 1을 반복하지 않고 다른 셀들로 데이터를 출력 컬럼 4 및 대안 단일 셀 또는 5 개로 데이터를 에코 방법에

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>"; 

그래서 질문은?

+0

예를 들어 message_by의 이전 값을 저장하고 다음 루프에서 동일한 값인 경우 출력합니다. –

+0

'rowspan'과'colspan''attr'을'td'의 것으로 사용하십시오. – adeltahir

+0

'rowspan'과'colspan'은 내가 그들에게 숫자를 할당 할 것을 요구할 것입니다, 어떻게 db에서 리턴 된 사람들의 수에 따라 동적으로 그것을 얻을 수 있습니까? –

답변

1

문제를 처리하는 일반적인 방법은 열 값의 변경 사항을 추적하는 작은 상태 시스템을 구축하는 것입니다. 귀하의 경우, 첫 번째 세 열의 값이 변경되면 전체 레코드를 인쇄하려고합니다. 그렇지 않으면 마지막 두 열만 인쇄하십시오. 아래에서 사용 된 트릭은 우리가 항상 태그를 내림으로써 반복되는 행에 대해 빈 문자열 만 할당한다는 것입니다. 중요

$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>"; 

:는이 답변에만 작동하고 포스트 그레스 쿼리 ORDER BY를 사용하여 결과 집합을 분류하는 경우에만 의미가 있습니다. 특히 세 개의 메시지 열이 먼저 정렬 된 상태로 쿼리를 정렬해야합니다.

+0

감사합니다. 그것은 효과가 있었다. 그리고 예, 결과 세트는 이미 주문되었습니다. –