繁体   English   中英

PHP 中的 MySQL 查询 - 如何在水平表中显示垂直结果?

[英]MySQL Query in PHP - How to display vertical results in a horizontal table?

因此,我继承了一个包含从网络表单收集的数据的表,但将所有响应堆叠到一个列中,如下所示 - 行数比这多得多,但这是一个示例,

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

我需要将每个人的所有响应分成几行并忽略 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

有任何想法吗?

干杯乔恩

在您的 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>');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM