V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zhangjieren
V2EX  ›  PHP

请问下 PHP 里面遇到联合查询是用 foreach 还是用联表查询

  •  
  •   zhangjieren · 2016-10-14 16:43:10 +08:00 · 2563 次点击
    这是一个创建于 2760 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题 当遇到多个表关联 需要查询出来的 时候 考虑到效率和资源的问题 是应该联表还是 foreach 第一张底表 然后去各个表里单独查询? 还是有说有更好的解决办法? 还有个问题 就是一般排序的话是用 mysql 的 ORDERBY 还是拿出来用 PHP 排序? MYSQL 的 ORDERBY 的开销太大 而 PHP 对一些二维三维数组排序貌似不是很友好?

    谢谢各位

    6 条回复    2016-10-15 13:16:51 +08:00
    z5864703
        1
    z5864703  
       2016-10-14 17:16:27 +08:00
    哪怕分开查询,也可以做到不用 foreach 每个表去查。
    可以参考 laravel 框架的 ORM 设计
    solaro
        2
    solaro  
       2016-10-14 17:23:59 +08:00
    php 中如果追求速度、效率,可以这么干:查出一个表的数据,然后丢给 php 变量,最后通过 php 的自身去拼凑数据。熟读会快很多,直接在 php 里 foreach 进行表查询,其实本质上是执行多了 N 次的数据库操作,如果不追求速度和效率可以这么干,写代码省事,如果要优化,最好别这么干
    qqjt
        3
    qqjt  
       2016-10-14 17:31:34 +08:00
    请使用 laravel 框架,一次性解决你说的各种问题
    zhangjieren
        4
    zhangjieren  
    OP
       2016-10-14 17:35:00 +08:00
    @qqjt 谢谢提醒 现在是一些老的项目的优化和改进,想知道如何优化会比较有效率。

    @solaro 谢谢大大 请问下就是说 foreach 里面查询是肯定不可取的 那接着就剩下联表和您说的这个通过 PHP 的拼凑,这样的话是否开发上会有点不太友好(就是比较麻烦←,←)
    mingyun
        5
    mingyun  
       2016-10-15 00:00:22 +08:00   ❤️ 1
    肯定不能在 foreach 查询,可以先查一个表的数据,然后用 in 查另外一个表,再映射下返回
    msg7086
        6
    msg7086  
       2016-10-15 13:16:51 +08:00
    可以去看一下 ORM 的 N+1 问题。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3354 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 00:48 · PVG 08:48 · LAX 17:48 · JFK 20:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.