簡體   English   中英

MYSQL到CSV-如何將列標題與所選列匹配

[英]MYSQL to CSV - How to match column headings with selected columns

對此一無所知,可以利用一些見識。

我嘗試僅選擇某些column_names (而不是column data)設置為CSV文件的標題。

現在,我只能使用$result = mysql_query("SHOW COLUMNS FROM ".$table);拉出所有列名$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;

?>

如果您知道列的名稱,則可以添加它們和/或直接從數組中打印它們。 如果仍要訪問從查詢中檢索到的內容,則可以$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,因此此示例更加清楚。

您可以查詢USER_TAB_COLUMNS表以獲取表列元數據。

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

因此您可能正在使用SQL Server-對於SQL Server,請使用此...

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

類型='V'用於視圖類型='U'用於表

我不知道為什么我會錯過這個,但是由於我已經必須列出我需要的列,所以我只需要將該字符串轉換為數組即可。

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

在不重做我的整個代碼的情況下,它可以完美地工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM