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:将多个查询转换为单个查询的主要内容,如果未能解决你的问题,请参考以下文章