【问题标题】:Run 2 sql query with 1 query for save query result as .csv format使用 1 个查询运行 2 个 sql 查询,以将查询结果保存为 .csv 格式
【发布时间】:2014-03-05 12:01:31
【问题描述】:

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

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

问题:

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

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

我搜索 google 并找到了许多结果,这些结果显示了如何仅使用一个查询将数据保存为 .csv 格式。但是您看到我的查询中有 2 条 while 语句,那么如何将其保存为 .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...     

    }
}        

【问题讨论】:

  • 那么,你到底想问什么?如何结合这两个查询或如何创建一个 csv 文件?
  • @EhsanT 感谢您的回复。问题是..如何从此查询创建 csv 文件。
  • 我可以看到您已经在使用一些代码,例如@Abhi Beckert 发布的代码,但是您说您无法实现您的目标。所以你有什么错误,或者发生了什么?你能解释一下吗?

标签: php mysql


【解决方案1】:

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

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

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 之外,没有什么好的解决方案。

【讨论】:

  • 不是将数据保存为csv格式。我只是将您的代码粘贴到// more data are goes to here...
  • @Babu 你需要弄清楚为什么它不适合你自己。我贴的是正确的方法,遍历每一行代码,找出它不起作用的原因。
猜你喜欢
  • 2018-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多