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

时间:2014-02-05 18:08:09

标签: php mysql sql pdo phpmyadmin

(是的,我已经“在问我的问题之前彻底搜索了一个答案”......但是没有找到我的问题的“正确”答案。我已经阅读了关于用户变量的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语句 - 作为字符串 - 使用phpMyAdmin工具和我上面列出的SQL获取与MySQL返回的结果集相同的结果集?我可以在PHP中传递给我新创建的PDO并获得正确行数的单个语句?

(似乎PDO应该能够处理这种情况,至少这是我从这个董事会的研究中收集到的......)

我是PHP / MySQL的新手,所以我已经准备好学习了。教导!

1 个答案:

答案 0 :(得分:2)

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

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;