0

これで空になり、いくつかの洞察を使用できます。

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

4 に答える 4

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 は意図的に繰り返されるため、この例はより明確です。

于 2012-11-15T18:28:18.210 に答える
0

USER_TAB_COLUMNSテーブルで、テーブル列のメタデータを照会できます。

SELECT table_name, column_name, data_type, data_length
FROM USER_TAB_COLUMNS
WHERE table_name = 'yourTableName'
于 2012-11-15T18:42:57.977 に答える
0

SQLサーバーを使用している可能性があります-SQLサーバーの場合、これを使用します...

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

ビューのタイプ = 'V' タイプ = テーブルのタイプ = 'U'

于 2012-11-16T18:55:38.327 に答える
-1

なぜこれを見逃していたのかわかりませんが、必要な列をすでにリストする必要があるため、その文字列を配列に変換して機能させる必要がありました。

$column_names = Array($columns); 後で使用する $csv_output .= '"'.$rowr[$j].'",';

コード全体をやり直すことなく、それは完全に機能しました。

于 2012-11-15T22:01:31.820 に答える