(是的,我已经“在问我的问题之前彻底搜索了一个答案”......但是没有找到我的问题的“正确”答案。我已经阅读了关于用户变量的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的新手,所以我已经准备好学习了。教导!
答案 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;