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

How to avoid nested foreach using PHP generator for MYSQL data to increase perfomance?

我有以下代码

$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
}

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