2012-03-06 10 views
0

PHPを使用してCSVファイルを書き出す際に問題があります。すべてが製品を除いてよく、1つのセルにすべての製品が必要です。製品は別のテーブルから来ています。次のコードで試しましたが、私を助けてください。 おかげPHPを使用して複数の値を1つのCSV列に挿入するにはどうすればよいですか?

ID Status Products  Buyer Name 
1  Pending book1, book2 bheem 


$row = array(); 

$row[] = 'ID'; 

$row[] = 'Status'; 

$row[] = 'Products'; 

$row[] = 'Buyer Name'; 

$data .= join(',', $row)."\\n"; 

$query = sprintf("SELECT * FROM orders WHERE order_id='{$_GET['order_id']}'"); 
$result = mysql_query($query) or die(mysql_error()); 
$row2 = mysql_fetch_assoc($result); 
$row = array(); // We must clear the previous values 
$row[] = $row2['order_id'];  
$row[] = $row2['status']; 

//Browse product name 
$product_q = sprintf("SELECT * FROM books WHERE bid='{$row2['bid']}'"); 
$res_prd = mysql_query($product_q); 
$prow = ''; 
while($prows = mysql_fetch_assoc($res_prd)) { 
    $prow.= $prows['product_name'];      
} 
    $row[] = $prow; 

$row[] = $row2['buyer_name']; 
$data .= join(',', $row)."\n"; 

header("Content-type: application/x-msdownload"); 

header("Content-Disposition: attachment; filename=order.csv"); 

header("Pragma: no-cache"); 

header("Expires: 0"); 

echo $data; 
+0

このコードではどのような結果が得られましたか? –

+0

あなたが期待していた出力の例と出力を – Hubro

+0

@Saiyam Patelとした場合、それは間違いなく役立つでしょう。私はすべての製品を別のセルに入れていますが、ありがとうございます。 – Bheem

答えて

0
$query = sprintf("SELECT * FROM orders WHERE order_id='{$_GET['order_id']}'"); 
$result = mysql_query($query) or die(mysql_error()); 
$row2 = mysql_fetch_assoc($result); 
    while($row2 = mysql_fetch_assoc($result)) {  

    $row = array(); // We must clear the previous values 
    $row[] = $row2['order_id']; 
    $row[] = $row2['status']; 

    $product_q = sprintf("SELECT * FROM books WHERE bid='{$row2['bid']}'"); 
    $res_prd = mysql_query($product_q); 
    $prow = ''; 
    while($prows = mysql_fetch_assoc($res_prd)) { 
      $prow.= $prows['product_name'];      
     } //End inner foreach 
    $row[] = $prow; //End while 
    $row[] = $row2['buyer_name']; 

    $data .= join(',', $row)."\n"; 
    } 

は次のように試してみてください...役に立つかもしれ:)

+0

1レコードを取得しています注文から、複数のレコードを本から... – Bheem

+0

これはデータベースの関係で論理的な問題です... $ prow = $ prows ['product_name']; .... remove。この行から –

0

使用して、本当にこのようなものが容易になり合流。

$orderid = intval($_GET['order_id']); 
$query = sprintf("SELECT order_id, status, product_name, buyer_name FROM books INNER JOIN orders ON bid = order_id WHERE order_id='{$orderid}'"); 

今、あなたのクエリでは、結果として含む配列を取得します: ORDER_ID、ステータス、PRODUCT_NAME、BUYER_NAME

は、コンテンツ、あなたの結果と出力を内破し、あなたの行って。

+0

を認識すると、これはすべての製品に対して新しい行を作成します。 – Tim

+0

ありがとう,,, D、基本的に私の心はコードで流れていた....ありがとうagain – Bheem

+0

申し訳ありませんが、これはすべての製品に新しい行を作成します。 – Bheem

0

問題は、 '、'がセルデリミタで、製品をリストするときに '、'を使用していると、これは各製品を新しいセルにプッシュします。

私はあなたがする必要があるすべてはあなたのwhileループはこれに変更だと思う:二重引用符でそれをラップすることにより、製品の電池をエスケープ

$prow = ''; 
while($prows = mysql_fetch_assoc($res_prd)) { 
    if($prow === '') {$prow = '"';}//start escaping the cell 
    else{$prow .=', ';} // separate each product by a space and comma 
    $prow.= $prows['product_name'];//add the product name 
} 
$prow .= '"';//finish escaping the cell 

は、あなたがそのセル内のカンマを使用できるようになります。

関連する問題