1

我的 select 语句看起来有点像这样:

CREATE TEMPORARY TABLE t1 AS(
    SELECT id, COUNT(*) AS count 
    FROM some_other_table 
    GROUP BY id);

ALTER TABLE t1 ADD UNIQUE INDEX (id);
SELECT * FROM t2 INNER JOIN t1 ON t1.id = t2.id

我正在使用以下 PHP 代码:

$pdo->query($sql)->fetchAll();

但是我收到一个错误,因为 PDO 不允许在一个查询中执行多个语句。

从我目前所读的内容来看,我应该使用 exec()。但是 exec() 不会返回 select 语句的结果。我不需要这个特定查询的参数化,所以任何不安全的方法也可以工作,因为查询本身是完全安全的,不受任何外部更改的影响。

现在我正在做的是将 sql 代码作为 3 个不同的语句执行。但我相信这比一次性执行它要慢,并且希望找到一种更好的方法来做到这一点。

4

1 回答 1

1

像许多其他缺乏经验的开发人员一样,您在尝试优化代码时正在寻找错误的方法。

尽管您对数据库进行了多少次调用并不重要,但创建临时表的想法正是使您的代码效率低下的原因。你必须摆脱这个非常慢的部分,而不是试图将它优化到 0.00001%

于 2013-08-17T17:02:39.627 回答