因此,我继承了一个表,该表保存了从Web表单收集的数据,但是将所有响应堆叠到如下所示的一列中-比该行多得多,但这是一个示例,
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
有什么想法吗?
欢呼 乔恩
答案 0 :(得分:0)
在您的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>');