我有以下代码
$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] 删除。
我来说两句