PHP / PDO / MySQL的:转换多个查询到单查询(PHP/PDO/MySQL: Conve

2019-10-19 07:47发布

(是的,我已经“彻底搜查的答案问我的问题之前,” ......但还没有找到“正确”的答案,我的问题。我已经阅读了MySQL的人有关用户变量...我已经阅读了PHP男人关于PDO ......还是不能神交的解决方案。)

我想从PHP代码,以获得从正确和成功执行中phpMyAdmin的这个SQL语句返回相同的结果集:

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打包并将其发送到的UI与jqplot插件来绘制...

其他一切工作的很好很好,只是在PHP中我无法执行多个SQL语句,这个过程我相信会被要求设置我的用户变量@x,在随后的SELECT语句中使用。 同样,当使用phpMyAdmin对我的数据库中查询这个SQL运行就好了... ...

我不知道,一般来说,在PHP中,一个不能在单个查询中执行多个SQL语句...

它是可能的,但是,创建一个SQL语句-作为一个字符串-将获取相同的结果集,使用phpMyAdmin的工具,我上面列出的SQL由MySQL返回? 单个语句,我可以传递给我的新创建的PDO我的PHP内获得行权数量?

(好像PDO的都应该能够处理这种情况下,至少这就是我从我的这个板子的研究收集...)

我有点新的PHP / MySQL的,所以我准备学习。 教了!

Answer 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/PDO/MySQL: Convert Multiple Queries Into Single Query