Я пытаюсь отобразить данные из базы данных в формате, показанном ниже;
|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?
Типичным способом решения вашей проблемы является создание небольшого конечного автомата, который отслеживает изменения значений столбцов. В вашем случае оказывается, что если какое-либо из значений первых трех столбцов изменится, то вы захотите напечатать полную запись. В противном случае просто напечатайте последние два столбца. Хитрость, использованная ниже, в том, что мы всегда бросаем <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
, В частности, запрос должен быть упорядочен с сортировкой трех столбцов сообщений.
Других решений пока нет …