在导出csv之前设置数据库列别名

时间:2013-06-30 20:08:19

标签: php mysql csv export alias

嘿伙计们,我正在尝试在我的脚本中导出csv,它运行得很好。现在我需要做的是,在完全导出csv之前,重命名列以清除名称和专有名称。

以下是数据库表的图片:http://i.imgur.com/aQrOZLk.png

这是代码:      

include_once "config.php";

$table = 'patients'; // table you want to export
$file  = 'export'; // csv name.

$result = mysql_query("SHOW COLUMNS FROM " . $table . ""); 
$i      = 0;

if (mysql_num_rows($result) > 0) {
while ($row = mysql_fetch_assoc($result)) {
    $csv_output .= $row['Field'] . ",";
    $i++;
}
}
$csv_output .= "\n";
$values = mysql_query("SELECT * FROM " . $table . "");

while ($rowr = mysql_fetch_row($values)) {
for ($j = 0; $j < $i; $j++) {
    $csv_output .= $rowr[$j] . ", ";
}
$csv_output .= "\n";
}

$filename = $file . "_" . date("d-m-Y_H-i", time());

header("Content-type: application/vnd.ms-excel");
header("Content-disposition: csv" . date("Y-m-d") . ".csv");
header("Content-disposition: filename=" . $filename . ".csv");

print $csv_output;
exit;
?>

正如您所看到的,它从此代码中获取表名:

$result = mysql_query("SHOW COLUMNS FROM " . $table . ""); 
$i      = 0;

if (mysql_num_rows($result) > 0) {
while ($row = mysql_fetch_assoc($result)) {
    $csv_output .= $row['Field'] . ",";
    $i++;
}
}

现在我要做的是允许它重命名数据库表 pat_id到患者ID pat_fname到患者名字 pat_lname to Patient姓氏 等等。使其在csv文件中看起来整洁可读。

我怎么能这样做?我已经尝试过几个代码:

$query = 'SHOW COLUMNS pat_id AS "user_id", pat_fname AS "first name", pat_lname AS "last name" FROM ' . $table;

但它没有奏效并发出错误。

2 个答案:

答案 0 :(得分:1)

您希望在select中使用友好的列名,而不是show columns

尝试这样的事情,而不是SELECT *

   $query = "SELECT pat_id AS 'user_id', pat_fname AS 'first name', pat_lname AS 'last name' FROM table";

请注意,MySQL希望您的列名以单引号显示,而不是双引号。

要在csv中处理这些内容作为列标题...试试这个。

$values = mysql_query($query);
$i = mysql_num_fields($values);
for ($j = 0; $j < $i; $j++) {
   $csv_output .= mysql_field_name($j) . ", ";
}
$csv_output .= "\n";

while ($rowr = mysql_fetch_row($values)) {
  for ($j = 0; $j < $i; $j++) {
      $csv_output .= $rowr[$j] . ", ";
  }
  $csv_output .= "\n";
}

答案 1 :(得分:0)

由于您要处理许多表,因此请创建一个多维数组并在其中预定义字段名称。

像这样, $表[ '表1'] [1] = “”; $表[ '表1'] [2] = “”; $表[ '表2'] [1] = “”;

然后替换此块,

if (mysql_num_rows($result) > 0) {
while ($row = mysql_fetch_assoc($result)) {
$csv_output .= $row['Field'] . ",";
$i++;
}
}

使用块从数组中获取表的字段名称。 这是唯一的方法。