2016-05-31 32 views
-1

我得到了兩張表門票回覆從兩張表中將MYSQL導出爲.csv

門票得到這個字段: ID,DNAME,MNAME,主題,優先級,消息,日期,last_reply,狀態,close_mname,cdfileds

回覆得到這個的Fileds: ID,TID MNAME,消息,日期

這些表是支持票。 我想將表格導出爲CSV。 這是我使用的代碼。

<?php 
/* vars for export */ 
// database record to be exported 
$db_record = 'trxp_tickets'; 
$db_record2 = 'trxp_replies'; // added by me 
// optional where query 
$where = 'WHERE 1 ORDER BY 1'; 
// filename for export 
$csv_filename = 'db_export_'.$db_record.'_'.date('Y-m-d').'.csv'; 
// database variables 
$hostname = "localhost"; 
$user = "xxxxx"; 
$password = "xxxxx"; 
$database = "xxxxxx"; 
// Database connecten voor alle services 
mysql_connect($hostname, $user, $password) 
    or die('Could not connect: ' . mysql_error()); 

mysql_select_db($database) 
    or die ('Could not select database ' . mysql_error()); 
// create empty variable to be filled with export data 
$csv_export = ''; 
// query to get data from database 
$query = mysql_query("SELECT id,dname,mname,subject,priority,message,date,last_reply,status,close_mname,cdfields FROM ".$db_record." ".$where); 
$field = mysql_num_fields($query); 
// create line with field names 
for($i = 0; $i < $field; $i++) { 
    $csv_export.= mysql_field_name($query,$i).';'; 
} 
// newline (seems to work both on Linux & Windows servers) 
$csv_export.= ' 
'; 
// loop through database query and fill export variable 
while($row = mysql_fetch_array($query)) { 
    // create line with field values 
    for($i = 0; $i < $field; $i++) { 
     $csv_export.= '"'.$row[mysql_field_name($query,$i)].'";'; 
    } 
    $csv_export.= ' 
'; 
} 
// Export the data and prompt a csv file for download 
header("Content-type: text/x-csv"); 
header("Content-Disposition: attachment; filename=".$csv_filename.""); 
echo($csv_export); 
?> 

在代碼中,它不包括在第二個表中時,我做了SELEC,雙打結果。嘗試使用UNION和UNION ALL但不起作用。 我想留在下面列出的CSV每個票的回覆。

+1

好的,但你想如何導出數據?兩個文件?一個文件包含兩個表中的所有列?另外一個選擇? –

+0

一個文件。我希望我能買到1號機票,並在下一行中回覆1號機票。然後票#2和票#2等的回覆。但是,檔案是不同的,所以我不知道是否可以做到。 –

回答

0

改變你的SQL從兩個表中獲取數據:

$query = mysql_query("SELECT 
          r1.id, r1.dname, r1.mname, r1.subject, 
          r1.priority, r1.message, 
          DATE_FORMAT(FROM_UNIXTIME(r1.date), '%d/%m/%Y') as r1_date, 
          r1.last_reply, r1.status, r1.close_mname, 
          r1.cdfields, 
          r2.id, r2.tid, r2.mname, 
          r2.message 
          DATE_FORMAT(FROM_UNIXTIME(r2.date), '%d/%m/%Y') as r2_date, 
        FROM ".$db_record." r1 
       INNER JOIN ".$db_record2." r2 
         ON r1.id = r2.tid 
          ".$where."); 

這應該做的伎倆。

mysql_ *函數已被棄用。您應該更改爲mysqli_ *或PDO。 (http://php.net/manual/en/function.mysql-query.php

+0

謝謝。代碼有效,但有一個問題,它會在CVS文件中複製結果。也許更容易在第一列顯示Tickets Fileds並繼續回覆filelds。 '例如:id,dname,mname,主題,.... id,tid,mname,....'在一行中,票據文件和答覆。 –

+0

改變你的選擇只獲取你需要的數據。 'SELECT r1.id,... FROM ...' –

+0

仍然重複。我不知道爲什麼,但每張票都是重複8次,即總票數。另一個問題是可以在選擇時更改日期的格式?我有這種日期格式:1459195461,我想要dd/mm/yyyy。謝謝Felippe。 –