繁体   English   中英

如何使用PHP在单个CSV列中插入多个值?

[英]How to insert multiple values in single CSV column using PHP?

我在使用php导出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;

问题在于,“,”是单元格分隔符,而您在列出产品时使用的是“,”,这会将每个产品推入新的单元格中。

我认为您需要做的就是将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

通过将产品单元格用双引号引起来转义,将允许您在该单元格中使用逗号。

$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";
  }

这样尝试...可能会有所帮助:)

使用联接确实使这些事情变得容易。

$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,status,product_name,buyer_name

确定结果并输出内容并完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM