You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP实现单MySQL查询生成多CSV及合并查询、表创建需求

解决方案

没问题,我来帮你一步步搞定这两个需求!

1. 创建MySQL汇率表并插入记录

首先按照你提供的语句创建表,小提醒:table是MySQL的保留字,建议换成更有意义的名字比如currency_exchange_rates,避免潜在的语法冲突。下面是调整后的创建语句(如果坚持用原表名,保留你给的语句即可):

-- 推荐使用更清晰的表名
CREATE TABLE IF NOT EXISTS `currency_exchange_rates` ( 
    `id` INT NOT NULL AUTO_INCREMENT , 
    `currency` VARCHAR(254) NOT NULL , 
    `rate` FLOAT NOT NULL , 
    `date` VARCHAR(254) NOT NULL , 
    `temptime` DATE NOT NULL , 
    PRIMARY KEY (`id`),
    UNIQUE KEY `unique_currency_date` (`currency`, `temptime`)
) ENGINE = MyISAM;

-- 如果你一定要用原表名
CREATE TABLE IF NOT EXISTS `table` ( 
    `id` INT NOT NULL AUTO_INCREMENT , 
    `currency` VARCHAR(254) NOT NULL , 
    `rate` FLOAT NOT NULL , 
    `date` VARCHAR(254) NOT NULL , 
    `temptime` DATE NOT NULL , 
    PRIMARY KEY (`id`),
    UNIQUE `UNIQUE` (`currency`, `temptime`)
) ENGINE = MyISAM;

接下来是插入记录的示例,你可以根据实际业务数据调整字段值:

-- 插入测试数据,注意temptime是DATE类型,格式需符合YYYY-MM-DD
INSERT INTO `currency_exchange_rates` (currency, rate, date, temptime)
VALUES 
('USD', 7.25, '2024-05-20 10:30:00', '2024-05-20'),
('EUR', 7.82, '2024-05-20 10:30:00', '2024-05-20'),
('GBP', 8.95, '2024-05-20 10:30:00', '2024-05-20'),
('USD', 7.26, '2024-05-21 09:15:00', '2024-05-21');

2. 合并查询并生成多个CSV文件

原来多查询生成多CSV的方式效率偏低,我们可以一次性查询所有需要的数据,再按指定条件(比如货币类型、日期)分组拆分生成多个CSV,这样能减少数据库交互次数,提升整体性能。

下面是完整的PHP代码示例:

<?php
// 数据库配置信息
$host = 'localhost';
$dbname = 'your_database_name';
$username = 'your_db_username';
$password = 'your_db_password';

try {
    // 初始化PDO数据库连接
    $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // 合并后的查询:一次性获取所有汇率数据
    $query = "SELECT id, currency, rate, date, temptime FROM currency_exchange_rates ORDER BY currency, temptime";
    $stmt = $pdo->prepare($query);
    $stmt->execute();
    $allData = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // 按货币类型分组,准备生成每个货币单独的CSV
    $groupedByCurrency = [];
    foreach ($allData as $row) {
        $currency = $row['currency'];
        if (!isset($groupedByCurrency[$currency])) {
            $groupedByCurrency[$currency] = [];
        }
        $groupedByCurrency[$currency][] = $row;
    }

    // 循环生成每个分组的CSV文件
    foreach ($groupedByCurrency as $currency => $rows) {
        $filename = "exchange_rate_{$currency}.csv";
        $file = fopen($filename, 'w');

        // 写入CSV表头
        fputcsv($file, array_keys($rows[0]));

        // 写入数据行
        foreach ($rows as $row) {
            fputcsv($file, $row);
        }

        fclose($file);
        echo "成功生成CSV文件:{$filename}<br>";
    }

    // 如果你需要按日期分组生成CSV,替换成下面的分组逻辑即可:
    /*
    $groupedByDate = [];
    foreach ($allData as $row) {
        $date = $row['temptime'];
        if (!isset($groupedByDate[$date])) {
            $groupedByDate[$date] = [];
        }
        $groupedByDate[$date][] = $row;
    }
    */

} catch(PDOException $e) {
    die("数据库操作失败: " . $e->getMessage());
}
?>

代码关键说明:

  • 合并查询:用单条SQL拉取所有数据,避免多次连接查询数据库,提升效率
  • 分组逻辑:示例按currency分组生成CSV,你也可以轻松改成按temptime(日期)分组,只需要替换分组代码块
  • CSV生成:用PHP内置的fputcsv函数,自动处理逗号分隔、引号转义等细节,确保CSV格式标准
  • 错误处理:通过PDO异常捕获机制,方便快速排查数据库连接或查询问题

内容的提问来源于stack exchange,提问作者Julius Barra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:24:49