2016-05-31 4 views
-1

2テーブルチケットがあります。PHPを使用して2つのテーブルからMYSQLをエクスポート

チケットは、このフィールドを得た: ID、TID、MNAME、メッセージを: last_reply ID、DNAME、MNAME、件名、優先度、メッセージ、日付、ステータス、close_mnameは、

回答はこれがfiledsだcdfileds 、日付

テーブルはサポートチケットです。 テーブルを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を作成すると2番目の表には含まれません。 UNIONとUNION ALLを使用してみてください。しかし動作しませんでした。 私は各チケットの回答の下に記載されているCSVに滞在したいと思います。

+1

データをエクスポートするにはどうすればよいですか? 2つのファイル?両方のテーブルのすべての列を含む1つのファイル?別のオプション? –

+0

1ファイル。私はチケット#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

ありがとうございます。コードは機能しますが、1つの問題があると、結果はCVSファイルに複製されます。おそらく、Tickets Filedsの最初の列に表示して、返信ファイルを続行する方が簡単かもしれません。 '例:id、dname、mname、subject、.... id、tid、mname、....'チケットの提出と返信。 –

+0

必要なデータのみを取得するように選択を変更します。 'SELECT r1.id、... FROM ... ' –

+0

まだ重複しています。私はなぜ、すべてのチケットが重複して8回、それはチケットの合計であるかわからない。別の問題は、選択を行うときに日付の形式を変更することが可能ですか?私はこの日付形式を持っています:1459195461と私はdd/mm/yyyyが欲しいです。ありがとうFelippe。 –

関連する問題