如何避免使用 PHP 生成器对 MYSQL 数据进行嵌套 foreach 以提高性能?

Insane_evil

我有以下代码

$this->connection->transactional(function () {
        $data = $this->connection->executeQuery('SELECT * FROM faq_questions')->fetchAll();
        $faqs = $this->connection->executeQuery('SELECT * FROM faq')->fetchAll();
        $countries = $this->connection->executeQuery('SELECT * FROM countries')->fetchAll();

        foreach ($faqs as $faq) {
            foreach ($countries as $country) {
                foreach ($data as $datum) {
                    if ($datum['faq_id'] === $faq['id']) {
                        $stmt = $this->connection->prepare('INSERT INTO faq_questions ...');
                        $stmt->execute([...]);
                    }
                }
            }
        }
    });

它运作良好。为了节省内存,我的团队领导建议我重构这段代码。如何避免使用 PHP 生成器的第三个foreach

约书亚

似乎您可以使用连接删除循环。

不清楚你完整的 SQL 语法,但这应该为你指明正确的方向:

$query='
    select * 
    from faq
        left join faq_questions faq.id=faq_questions.faq_id
        left join countries=faq.countries.id=faq.countries_id
';

$questions=$this->connection->executeQuery($query)->fetchAll();

foreach($questions as $question){
    //do insert stuff
}

请注意,这是未经测试的,我不知道您的正确架构,因此您可能需要更改一些内容,但希望这足以提供帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章