MYSQL到CSV - 如何将列标题与选定列匹配

时间:2012-11-15 18:18:02

标签: php mysql

在这个问题上空洞,可以使用一些见解。

我尝试仅选择某些column_names(不是列数据)来设置为CSV文件的标头。

现在,我只能使用所有列名称 $result = mysql_query("SHOW COLUMNS FROM ".$table);

问题在于它提取了所有列名称,而我只想要某些列的数据。要获取数据值,此查询将完美运行:

$values = mysql_query("SELECT ".$columns." FROM ".$table." WHERE channel_id=26");

例如,如何选择或仅显示我在$columns中列出的列的列名称?


编辑 - 我在这里添加完整的PHP以提供更多上下文。第7行是我的问题。

<?php

$table = 'exp_channel_data'; // table we want to export
$columns = 'entry_id, field_id_26, field_id_27, '; // only the columns we want to show
$file = 'registrations-from-web'; // csv name.

$result = mysql_query("SHOW COLUMNS FROM ".$table);
$count = mysql_num_rows($result);

$csv_output = "";

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

$csv_output .= "\n";
$values = mysql_query("SELECT ".$columns." FROM ".$table." WHERE channel_id=26");
while ($rowr = mysql_fetch_row($values))
{
    for ($j=0; $j<$count; $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;

?>

4 个答案:

答案 0 :(得分:1)

如果您知道列的名称,则可以添加它们和/或直接从数组中打印它们。 如果你想要访问从查询中检索到的那些,你可以每行$result = mysql_fetch_assoc($values);,并且键将始终包含列的名称,因为结果数组是关联的。

尝试:

$values = mysql_query('SELECT '. $columns. ' FROM '.
    $table. ' WHERE channel_id = 26');
print_r(mysql_fetch_assoc($values));

了解结果数组的内容。

现在尝试:

$first = 1;
echo '<table>';
while ($assoc = mysql_fetch_assoc($values))
{
    echo '<tr>';
    if ($first)
    {   
        foreach ($assoc as $key => $value)
            echo "<th>$key</th>\n";
        $first = 0;
    }   
        else
    {   
        foreach ($assoc as $key => $value)
            echo "<td>$value</td>\n";
    }   
    echo '</tr>';
}
echo '</table>';

如果你想要的是打印CSV文件:

$columns = Array();
$values = Array();
$first = 1;
for ($i = 0; $assoc = mysql_fetch_assoc($values); ++$i)
{
    if ($first)
    {   
        foreach ($assoc as $key => $value)
            $columns[] = $key;
        $first = 0;
    }   
        else
    {   
        foreach ($assoc as $key => $value)
            $values[$i][] = $value;
    }   
}
$out = fopen('php://output', 'w');
fputcsv($out, $columns);
foreach ($values as $line)
    fputcsv($out, $line);

有意重复foreach,所以这个例子更清楚。

答案 1 :(得分:0)

您可以在USER_TAB_COLUMNS表中查询表列元数据。

SELECT table_name, column_name, data_type, data_length
FROM USER_TAB_COLUMNS
WHERE table_name = 'yourTableName'

答案 2 :(得分:0)

所以你可能正在使用SQL服务器 - 对于SQL服务器使用这个......

SELECT [name] AS [Column Name]
FROM syscolumns
WHERE id = (SELECT id FROM sysobjects WHERE type = 'V' AND [Name] = 'Your table name')

Type ='V'表示视图Type ='U'表格

答案 3 :(得分:-1)

我不知道为什么我错过了这个,但由于我已经不得不列出我需要的列,我只需要将该字符串转换为数组即可使其正常工作。

$column_names = Array($columns); 然后用 $csv_output .= '"'.$rowr[$j].'",';

在没有重做我的整个代码的情况下完美无缺。