我有一个MySQL列,其中包含一个JSON字符串的问题编号(0-165)作为关键字和问题答案(得分为1-5)作为值。我需要检索所有MySQL列,将它们放在一个.csv文件中,其中JSON值在不同的列中。
到目前为止,我有一个有效的PHP函数,它使用fputcsv()将整个MySQL表输出到CSV文件。这是代码:
function buildcsv(){
$start = $_POST['start'];
$end = $_POST['end'];
$result = mysql_query('SELECT fullname, institution, email, timestamp, responsesJSON
FROM `members` WHERE timestamp BETWEEN "'.$start.'" AND "'.$end.'"');
if (!$result) die('Couldn\'t fetch records');
ob_start();
$fp = fopen('php://output', 'w');
if ($fp && $result) {
while ($row = mysql_fetch_row($result)) {
fputcsv($fp, array_values($row));
}
fclose($fp);
return ob_get_clean();
}else{
$error = "Error. Either there is no data or invalid date.";
return $error;
}
}
这是代码的输出:
但是,我需要我的CSV输出类似于以下模型:
是否可以在不更改数据库结构的情况下执行此操作?我已经看到stackoverflow上的代码将JSON值放入单独的列中,但是如何将它集成到我检索所有其他MySQL列的现有代码中?
提前谢谢大家。
答案 0 :(得分:2)
试试这种方式
while ($row = mysql_fetch_row($result)) {
$marks = json_decode($row['responsesJSON'],true);
unset($row['responsesJSON']);
fputcsv($fp, array_merge(array_values($row),array_values($marks)));
}
这不是最好的解决方案,但只是思考的问题并指出要开始。
希望它可以提供帮助
答案 1 :(得分:1)
非常感谢@KimAlexander和@RocketHazmat的建议,我明白了:
function buildcsv(){
$start = $_POST['start'];
$end = $_POST['end'];
$result = mysql_query('SELECT fullname, institution, email, timestamp, responsesJSON
FROM `members` WHERE timestamp BETWEEN "'.$start.'" AND "'.$end.'"');
if (!$result) die('Couldn\'t fetch records');
ob_start();
$fp = fopen('php://output', 'a');
if ($fp && $result) {
while ($row = mysql_fetch_assoc($result)) {
$personal = array($row['fullname'], $row['institution'], $row['email'], $row['timestamp']);
$scores = json_decode($row['responsesJSON'], true);
fputcsv($fp, array_merge($personal, $scores));
}
fclose($fp);
return ob_get_clean();
}else{
$error = "Error. Either there is no data or invalid date.";
return $error;
}
}