まず、以下のコードの一部についてお詫び申し上げます。私は PHP と学習に不慣れで、私が書いたコードが最もエレガントでも最も効率的でもないことを知っています。
MySQL のテーブルからデータをエクスポートして、Excel で使用する CSV タイプのファイルを生成する関数を作成しようとしています。これまでのところ、テーブル内の変数の 1 つを「クライアント ID」(数値) から「会社名」(テキスト値) に置き換えて、最終的にエクスポートされたファイルを読みやすくすることを除いて、すべてが機能しています。 .
これまでの私のコードは次のようなものです (もう一度お詫びします!)、
//Connect with db
global $smarty;
$tpl_vars = $smarty->get_template_vars();
global $gCms;
$db = &$gCms->GetDb();
//Check config settings
$config = $tpl_vars['invoice_export_columns'];
$headers = str_replace('"','\'',$config);
$rows = str_replace('"','',$config);
$start = $tpl_vars['from'];
$start = date("'Y-m-d'", $start);
$end = $tpl_vars['to'];
$end = date("'Y-m-d'", $end);
//Get client name
$modops = cmsms()->GetModuleOperations();
$joms = $modops->get_module_instance('JoMS');
$client = $tpl_vars['clientrp'];
$query = 'SELECT * FROM '.cms_db_prefix() .'module_joms_clients
WHERE company_name = ?';
$row = $db->GetRow($query, array($client));
$client = $row['client_id'];
$clientid = "'$client'";
//Check available statuses
if (isset($tpl_vars['csvdraft'])) { $draft = '\'14\''; } else { $draft = '\'0\''; }
if (isset($tpl_vars['csvsent'])) { $sent = '\'15\''; } else { $sent = '\'0\''; }
if (isset($tpl_vars['csvpaid'])) { $paid = '\'25\''; } else { $paid = '\'0\''; }
//Connect with invoices
$db = cmsms()->GetDb();
$table = 'cms_module_joms_invoice_headers';
$file = 'export';
//Create headers
$result = mysql_query("SHOW COLUMNS FROM ".$table." WHERE Field IN ($headers);");
$i = 0;
if (mysql_num_rows($result) > 0)
{
while ($row = mysql_fetch_assoc($result))
{
$csv_output .= $row['Field'].", ";
$i++;
}
}
$csv_output .= "\n";
//Create body
if ( $clientid == "''" ) {
$values = mysql_query("SELECT $rows FROM ".$table." WHERE invoicedate >= $start AND invoicedate <= $end AND (status_id = $draft OR status_id = $sent OR status_id = $paid) ");
} else {
$values = mysql_query("SELECT $rows FROM ".$table." WHERE invoicedate >= $start AND invoicedate <= $end AND (status_id = $draft OR status_id = $sent OR status_id = $paid) AND client_id = $clientid ");
}
while ($rowr = mysql_fetch_row($values))
{
for ($j=0;$j<$i;$j++)
{
$csv_output .= $rowr[$j].", ";
}
$csv_output .= "\n";
}
//Write file
$myFile = "uploads/csv/invoice.csv";
$fh = fopen($myFile, 'w') or die("can't open file");
fwrite($fh, $csv_output);
fclose($fh);
それらは client_id というテーブルの列で、これは現在 csv 本体に 2 桁の数値として出力されています。これを実際の名前に置き換えたいと思います。コードの前半で、(//Get client name の下で) 同じことを逆に行うことができましたが、同時に $csv_output を生成しながら、これを逆に行う方法がわかりません。
$csv_output は次のようになります。
請求書番号 client_id 請求日 status_id 税率 amountnett
100 2 2012-06-14 00:00:00 15 19.6 50
103 3 2012-06-16 00:00:00 15 20 23.5
104 2 2012-06-27 00:00:00 15 20 50
私がやりたいことは、列 client_id の値を「module_joms_clients」テーブルの列 company_name の値に置き換えることです。
これは答えるのが難しい質問だと思いますが、誰かが助けてくれるかどうか見てみようと思いました.
編集
以下のコードを試してみましたが、まだ機能しておらず、理由がわかりません。
//Create body
$values = mysql_query("SELECT $rows FROM ".$table." JOIN cms_module_joms_clients ON cms_module_joms_invoice_headers.client_id = cms_module_joms_clients.company_name WHERE invoicedate >= $start AND invoicedate <= $end AND (status_id = $draft OR status_id = $sent OR status_id = $paid) ");
while ($rowr = mysql_fetch_row($values))
{
for ($j=0;$j<$i;$j++)
{
$csv_output .= $rowr[$j].", ";
}
$csv_output .= "\n";
}
クライアント情報を格納するテーブルは「cms_module_joms_clients」と呼ばれ、クライアントの名前は列「company_name」の下に格納されます。クライアント ID は「cms_module_joms_invoice_headers」テーブルから取得され、行は「client_id」と呼ばれます。
私はそれが正しいと思っていましたが、そうではないと思います。
編集
「cms_module_joms_clients」テーブル構造は次のようになります。
「cms_module_joms_invoice_headers」テーブル構造は次のようになります。