PHP导出两个Mysql表数据到Excel或CSV

问题描述 投票:0回答:1

我有两个以下格式的 mysql 表

表 1 - 研究所基本详细信息 (institute_basic_details)

id  | institute_unique_id  |  institute_name  | institute_city
 1      ABCD1234                NAME-1               AAA
 2      EFGH4567                NAME-2               BBB
 3      IJKL8999                NAME-3               CCC

表 2 - 机构所有者详细信息 (institute_owners_details)

id  | institute_unique_id  | owner_name  |    owner_email_id  | owner_mobile
 1       ABCD1234             OWNER-A-1      [email protected]   98811xxxxx
 2       ABCD1234             OWNER-B-2      [email protected]   87454XXXXX
 3       ABCD1234             OWNER-C-3      [email protected]   54785XXXXX
 4       EFGH4567             OWNER-D-1      [email protected]   47874XXXXX
 5       EFGH4567             OWNER-E-2      [email protected]   45455XXXXX
 6       IJKL8999             OWNER-F-1      [email protected]   78478XXXXX
 7       IJKL8999             OWNER-G-2      [email protected]   87478XXXXX

表 2 包含每个研究所的所有者数量不均匀...

我想以以下格式导出 excel/csv 中两个表中的合并数据...

连续的单元格 - 例如

LIKE:连续 - 机构名称、机构所在城市、所有者 1 姓名、所有者 1 电子邮件、所有者 1 手机、所有者 2 姓名(如果存在)、所有者 2 电子邮件(如果存在)、所有者 2 手机(如果存在)、 .... 依此类推,业主 3、业主 4、业主 5 ......


目前我正在使用以下代码将数据导出到 csv 仅从一张表....

<?php
 include("db.php");
 
 $query = "SELECT * FROM institute_basic_details ORDER BY id ASC"; 
 $numrows = $database->num_rows($query); 
  if($numrows > 0){ 
     $delimiter = ","; 
  
     $filename = "INSTITUTE-LIST-" . date('d-F-Y-H-i-s') . ".csv";
     $count = 1; 

     $f = fopen('php://memory', 'w'); 
   
     $fields = array("SERIAL NUMBER", "INSTITUTE NAME", "INSTITUTE CITY");

     fputcsv($f, $fields, $delimiter); 

     $result = $database->get_results($query);
         foreach($result as $row){ 
            $lineData = array($count, $row['institute_name'], $row['institute_city']);
         }

     fseek($f, 0); 
     
     header('Content-Type: text/csv'); 
     header('Content-Disposition: attachment; filename="' . $filename . '";'); 
 

     fpassthru($f); 

   }
  ?>
php mysql export-to-csv export-to-excel
1个回答
0
投票

按照 Barmar 的建议,我们可以对每个机构名称和城市进行查询。

$sql = "SELECT * FROM institute_basic_details ORDER BY id ASC";

获取存储在数组中的基本详细信息,因为我们要将所有内容数组合并在一起。

然后循环其详细信息并再次查询:

while ($data = $stmt -> fetch(PDO::FETCH_ASSOC)) {
    $sql = "SELECT * FROM institute_owner_details where institute_unique_id = ?";

$data['institute_unique_id']
将其作为变量传递

在 while 循环内,我们可以通过另一个 while 循环开始缝合所需的数据。

$second_query -> execute();
$while ($owner_details = $second_query -> fetch(PDO::FETCH_ASSOC)) {
    $names[] = $owner_details['names'];
    $email[] = $owner_details['email'];
    $phone[] = $owner_details['phone'];
}

以数组形式获取这些信息将帮助我们循环它们并开始构建实际的数据行。

$array = [];
for ($i = 0; $i < count($names); $i++) {
    $array = array_merge($array,[$containers[$i], $dates[$i]]);
}

上面的代码开始将这些所有者详细信息堆叠在一起,基本上构建了一行的最终外观。

$array
将包含所有者信息。

希望您一开始就保存了基本详细信息,因为我们正在将其与此合并

$array
以完成您的 csv/excel 行

array_merge($basic_details, $array); // one complete row
© www.soinside.com 2019 - 2024. All rights reserved.