PHP/PDO/MySQL:将多个查询转换为单个查询

Posted

技术标签:

【中文标题】PHP/PDO/MySQL:将多个查询转换为单个查询【英文标题】:PHP/PDO/MySQL: Convert Multiple Queries Into Single Query 【发布时间】:2014-03-02 08:17:09 【问题描述】:

(是的,我已经“在提出我的问题之前彻底搜索了答案”......但还没有找到我的问题的“正确”答案。我已经阅读了关于用户变量的 mysql 手册...... . 我已经阅读了关于 PDO 的 php 手册......仍然无法理解解决方案。)

我正在尝试从 PHP 代码中获取从该 SQL 语句返回的相同结果集,该语句在 PhpMyAdmin 中正确且成功地执行:

SET @x := 0;

SELECT * 
FROM (

   SELECT 
   `o`.`timestamp`
   `o`.`v_phase_a` ,
   `o`.`v_phase_b` ,
   `o`.`v_phase_c` ,
   (@x := @x+1) AS x
   FROM `operational_parameters` AS o
   WHERE `o`.`timestamp` >= '2014-01-21 05:00:00'
   AND `o`.`timestamp` <= '2014-02-04 04:59:30'
   ORDER BY `o`.`timestamp`

) t
WHERE x MOD 336 = 0;

结果集类型的基本原理由来已久,根植于我客户的业务需求。它应该表示存储为在给定时间跨度内间隔 30 秒插入的行的数据的统一采样,在本例中为 2 周......这个特定的语句正好返回 120 行数据,然后由 PHP 打包并发送到用jqplot插件绘制的UI...

除了在 PHP 中我无法执行多个 SQL 语句之外,其他一切都运行良好,我认为需要这个过程来设置我的用户变量 @x,以便在后续的 SELECT 语句中使用。同样,当使用 phpMyAdmin 对我的数据库进行查询时,此 SQL 运行良好......

我确实意识到,一般来说,在 PHP 中,不能在单个查询中执行多个 SQL 语句...

但是,是否有可能创建一个 SINGLE SQL 语句 - 作为一个字符串 - 它将获取与 MySQL 使用 phpMyAdmin 工具和我上面列出的 SQL 返回的结果集相同的结果集? 我可以将一条语句传递给我在 PHP 中新创建的 PDO 并获得正确的行数?

(似乎 PDO 应该能够处理这种情况,至少这是我从我对这块板的研究中收集到的……)

我对 PHP/MySQL 有点陌生,所以我准备好学习了。继续学习!

【问题讨论】:

【参考方案1】:

您可以将初始化移动到子查询中:

SELECT *
FROM (SELECT o.timestamp , o.v_phase_a , o.v_phase_b , o.v_phase_c , (@x := @x+1) AS x
      FROM operational_parameters AS o cross join
           (select @x := 0) const
      WHERE o.timestamp >= '2014-01-21 05:00:00' AND o.timestamp <= '2014-02-04 04:59:30'
      ORDER BY o.timestamp
     ) t
WHERE x MOD 336 = 0;

【讨论】:

完美!我今天学到了一些东西。在 PHP 中实现后,该 SQL 每次都返回完美的结果集。非常非常感谢 Linoff 先生和 ***。太棒了!

以上是关于PHP/PDO/MySQL:将多个查询转换为单个查询的主要内容,如果未能解决你的问题,请参考以下文章

PHP PDO mySQL 查询返回列名和整数

MDX:如何将具有多个成员的元组转换为具有单个成员的元组?

jquery 单个查询中的多个选择器

如何(取消)将多个指标转换为单个列?

将符合多个协议的类型转换为单个协议

如何将多个整数的列表转换为单个整数?