Maison > développement back-end > tutoriel php > php 优化查询 foreach

php 优化查询 foreach

WBOY
Libérer: 2016-08-08 09:24:13
original
1307 Les gens l'ont consulté

php代码优化

<code>应避免在php foreach里面进行sql查询
以下代码示例使用了laravel的操作数据库api,eloquent orm
</code>
Copier après la connexion

foreach里面执行两次sql查询

<code><span>// $datas 要返回的数据</span>
foreach (<span>$datas</span> as <span>$_v</span>) {
    <span>// todo 在foreach中查询了两次 **time**: 290 ms(postman)</span><span>$uid</span><span>=</span><span>$_v</span><span>-></span>uid;
    <span>$_v</span><span>-></span>user_name   <span>=</span> User<span>::find</span>(<span>$uid</span>)<span>-></span>username; <span>// 1</span><span>$_v</span><span>-></span>user_avatar <span>=</span> User<span>::find</span>(<span>$uid</span>)<span>-></span>avatar;   <span>// 2</span>
}</code>
Copier après la connexion

foreach里面执行一次sql查询

<code>foreach (<span>$datas</span> as <span>$_v</span>) {
    <span>// todo</span><span>// 简单的优化使得两次sql查询变成一次</span><span>// 在foreach中查询了一次 **time**: 230 ms(postman)</span><span>$user</span><span>=</span> User<span>::find</span>(<span>$_v</span><span>-></span>uid));     <span>// 1</span><span>$_v</span><span>-></span>user_name   <span>=</span><span>$user</span><span>-></span>username;
    <span>$_v</span><span>-></span>user_avatar <span>=</span><span>$user</span><span>-></span>avatar;
}</code>
Copier après la connexion

将sql查询移到foreach外面

<code>上面两个方法都不可避免的在foreach里面执行了数据库查询
**应避免在foreach中执行sql查询**
此处我的做法是再加一层foreach+if来代替sql查询
// 本质上是将foreach中的查询移到外面
</code>
Copier après la connexion
<code><span>// $tmp_data_arr 是存储在foreach外面执行的数据库查询结果</span><span>foreach</span> (<span>$tmp_data_arr</span><span>as</span><span>$value</span>) {
    <span>foreach</span> (<span>$datas</span><span>as</span><span>$_v</span>) {
        <span>if</span> (<span>$_v</span>->uid === <span>$value</span>[<span>'id'</span>]) { <span>// **time**: 180 ms(postman)</span><span>$_v</span>->user_name   = <span>$value</span>[<span>'username'</span>];
            <span>$_v</span>->user_avatar = <span>$value</span>[<span>'avatar'</span>];
        }
    }
}</code>
Copier après la connexion

小结

<code><span>// 返回数据</span><span>return</span><span>$datas</span>;</code>
Copier après la connexion
<code>经过简单的优化:时间(ms):290 -> 230 -> 180
</code>
Copier après la connexion

ps

<code>postman是一款很好用的chrome调试restful api的插件
</code>
Copier après la connexion

以上就介绍了php 优化查询 foreach,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal