2012-11-15 33 views
0

在這一個上空了,可以使用一些見解。MYSQL到CSV - 如何匹配列標題與選定的列

我試着只選擇某些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; 

?> 
+0

做'$列=「 column1_i_want,column2_i_want,column3_i_want「'? – Jasper

+0

我有,但我怎麼做它的列名?什麼是適當的查詢?沒有什麼我嘗試工作。 –

回答

-1

我不知道爲什麼我失蹤了這一點,但因爲我已經有列出了我所需要的專欄中,我只是需要把這個字符串到一個數組要提出的是它的工作。

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

,完美的工作沒有重做我的全部代碼。

+0

可怕的方式來做到這一點。如果其中一個結果包含逗號,該怎麼辦? – Cory

+0

@Cory,編輯回答你的問題。 –

+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重複的宗旨,使這個例子更清晰。

+0

好吧,這樣就給了我'Array([entry_id] => 250 [field_id_26] => 1'等等......我怎麼才能從該數組中獲取'column_names'? –

+0

@StephenC。look at my編輯 – Mario

+0

我有所有的原始代碼我會更新我的問題,包括完整的PHP我很感謝你的幫助 –

0

您可以查詢USER_TAB_COLUMNS表中的表列元數據。

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

這給出了一個錯誤:表'myTableName.USER_TAB_COLUMNS'不存在。沒有錯誤,沒有過濾發生,所以這不會工作。 –

+0

這適用於Oracle ..我的壞...看到我的答案下面的SQL服務器... –

0

,所以你可能會使用SQL服務器 - 對於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' 對錶

+0

我很欣賞這個幫助。謝天謝地,我找到了一個解決方案,但我相信這會有所幫助。 –