MySQL Query in PHP - Как отобразить вертикальные результаты в горизонтальной таблице? - PullRequest
0 голосов
/ 11 сентября 2018

Итак, я унаследовал таблицу, которая содержит данные, собранные из веб-формы, но объединяет все ответы в один столбец, как показано ниже - строк намного больше, чем этот, но это пример,

U_ID    Q_ID  textResponse
1       1     jon
1       2     toomey    
1       3     some@email.com
1       4     NULL
1       5     NULL
2       1     bob
2       2     smith
2       3     another@email.com
2       4     NULL
2       5     NULL
3       1     jim
3       2     kirk
3       3     captains@log.com
3       4     NULL
3       5     NULL

Мне нужно разделить все ответы для каждого человека на строки и игнорировать пустые записи.

Я хочу, чтобы это выглядело так

Name     Surname    Email
jon      toomey     some@email.com
bob      smith      another@email.com
jim      kirk       captains@log.com

SQL, который я пробовал, выглядит следующим образом,

$sql = "
SELECT
    CASE 
        WHEN q_id = 1 THEN textResponse 
    END AS Name
FROM Responses 
UNION
    SELECT
        CASE 
            WHEN q_id = 2 THEN textResponse 
        END AS Surname
    FROM Responses 
UNION
    SELECT
        CASE
            WHEN q_id = 3 THEN textResponse 
        END AS Email
    FROM Responses
";

PHP, который я написал, выглядит следующим образом,

<?php while ($rows = $result->fetch_assoc()){ ?>
    <tr>
        <?php
            foreach ($rows as $row)
            echo "<td>" . $row . "</td>"; 
            ?>
    </tr>
 <?php
     } 
 ?>

но он дает мне все в одной строке, а не в трех столбцах

MySQL 5.7.18 PHP 5.3.3

Есть идеи?

Приветствие Jon

1 Ответ

0 голосов
/ 12 сентября 2018

Было бы намного проще сделать это в вашем php-коде:

Сначала получите все по

SELECT `Q_ID`, `textResponse` FROM `Responses` ORDER BY `U_ID`, `Q_ID`

Тогда в свое время сделай что-то подобное

$table_rows = '';
while($row = $result->fetch_assoc()) {
  switch($row['Q_ID']) {
    case '1': 
      $table_rows .= '<tr><td>' . $row['textResponse'] . '</td>';
      break;
    case '2':
    case '3':
      $table_rows .= '<td>' . $row['textResponse'] . '</td>';
      break;
    case '4':
      $table_rows .= '</tr>';
      break;
  }
}

Наконец, заверните его в правильную разметку таблицы и отправьте обратно:

die('<table><tbody>' . $table_rows . '</tbody></table>');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...