【问题标题】:PHP/PDO/MySQL: Convert Multiple Queries Into Single QueryPHP/PDO/MySQL:将多个查询转换为单个查询
【发布时间】: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 有点陌生,所以我准备好学习了。继续学习!

【问题讨论】:

    标签: php mysql sql pdo phpmyadmin


    【解决方案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 先生和 stackoverflow。太棒了!
    猜你喜欢
    • 2020-12-10
    • 2011-04-16
    • 2012-06-24
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多