[英]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.