运行带有1个查询的2个sql查询,将查询结果保存为.csv格式

时间:2014-03-04 17:38:15

标签: php mysql

在我的网页上我有2页。 1)admin.php 2)csv.php。在admin.php页面中,查询后显示来自db的数据。在csv.php页面中,我使用相同的查询将数据保存为.csv格式,但无法保存。

我决定在ONE QUERY中运行相同的查询。这样我就可以获得查询结果并将其保存为csv格式。

问题:

1)如何将此查询运行到一个查询?

2)以下查询成功显示数据。那么如何将其保存为.csv文件?

我搜索谷歌,发现了很多结果,显示如何只用一个查询将数据保存为.csv格式。但是你看到我在我的查询中有2个声明然后如何将其保存为.csv格式?不知道:(

感谢并寻求您的帮助。 :)
注意:我是关于php和mysql的新学习者。

$sqlagentdetails = "select * from users WHERE company_name != ''";
$rowresult = mysql_query($sqlagentdetails); 
while($row = mysql_fetch_array($rowresult, MYSQL_ASSOC))
{
    $pc1 = $row['pc1'];
    $pc2 = $row['pc2'];
    $pc3 = $row['pc3'];
    $pc4 = $row['pc4'];                      
    $emailAgent = $row['user_email'];                      
    $user_id = $row['id'];


$myQuery =  mysql_query("
 SELECT * 
   FROM user_property upr 
  WHERE (postcode = '$pc1' OR
         postcode = '$pc2' OR
         postcode = '$pc3' OR
         postcode = '$pc4') AND
         datediff(CURDATE(), upr.creation_date) <= 7 AND
         NOT EXISTS(SELECT ofr.property_id 
                      FROM offers ofr 
                     WHERE ofr.property_id = upr.property_id AND
                           ofr.agent_id IN(SELECT id 
                                             FROM users 
                                            WHERE company_name !=''
                                          )
                   )
ORDER BY property_id DESC");


    while($row = mysql_fetch_array($myQuery)){

    // more data are goes to here...     

    }
}        

1 个答案:

答案 0 :(得分:0)

  

1)如何将此查询运行到一个查询?

您不希望它作为一个查询运行。通常,有很多小的简单查询而不是一个复杂的查询会更好。事实上,我建议你更新代码以获得更多查询,例如“not exists()”的内容不应该作为子查询完成,它应该是一个完全独立的查询来提高性能。

  

2)以下查询成功显示数据。那我怎么把它保存为.csv文件?

有两个部分,首先您需要发送正确的HTTP标头以触发CSV下载:

header('Content-type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="export.csv";' );

然后只需以CSV格式打印出数据:

while ($row = mysql_fetch_array($myQuery)) {
  $first = true;
  foreach ($row as $cell) {
    if ($first)
      $first = false;
    else
      print ',';

    print '"' . addslashes($cell) . '"';
  }
  print "\n";
}

注意:CSV格式不正确,这只适用于某些版本的Microsoft Excel。根据用户所在的位置(例如:欧洲),它可能无法正常工作。但是对于大多数版本的Excel,上述内容都可以使用。除了避免使用CSV之外,没有好的解决方案。