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

关于在循环中对数据库操作的问题

  •  
  •   madpecker009 · 2020-04-23 09:59:52 +08:00 · 2287 次点击
    这是一个创建于 1682 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近新入职一家公司,外包,发现他们的代码中有很多下面的写法

    foreach($arr as $k=>$v)
    {
    
    	$a = Db::table('a')->where('a_colum',$v['some-key'])->select();
        	$b = Db::table('b')->where('b_colum',$v['some-key'])->select();
        
    }
    

    这种坑之前碰到过这样的坑,我的做法就是把相关的数据都查询出来,然后在内存中进行数据拼接,除了在循环中查询数据和在内存中拼接,大家还有什么好的办法么?求赐教。

    17 条回复    2020-04-23 22:35:17 +08:00
    lscexpress
        1
    lscexpress  
       2020-04-23 10:25:15 +08:00
    优化的方向就是多条 sql 合并为一条,这就得到了优化的效果,具体做法看你怎么去实现
    brader
        2
    brader  
       2020-04-23 10:30:30 +08:00
    你这个应该可以用 a_colum IN() 吧?
    cvl
        3
    cvl  
       2020-04-23 10:33:32 +08:00
    我之前碰到过这种 , 做法是把查询条件优化成一个数组作为条件。总的来说就是整合到一起去执行 ,得到得结果再去遍历
    taaaang
        4
    taaaang  
       2020-04-23 13:13:04 +08:00
    有时候可读性好一点,牺牲一点点资源或者是性能并不是太大的问题
    dilu
        5
    dilu  
       2020-04-23 13:15:12 +08:00
    如果不需要性能,而且还是外包的话,怎么方便怎么写
    madpecker009
        6
    madpecker009  
    OP
       2020-04-23 13:42:06 +08:00
    @brader 是的 但是他们没用 直接这么查询的
    madpecker009
        7
    madpecker009  
    OP
       2020-04-23 13:42:40 +08:00
    @dilu 这么说好像也有道理 反正不是自己的产品
    madpecker009
        8
    madpecker009  
    OP
       2020-04-23 13:43:01 +08:00
    @cvl 好 以后再碰到会这么解决的
    madpecker009
        9
    madpecker009  
    OP
       2020-04-23 13:43:30 +08:00
    @lscexpress 得具体问题。现在让我这么说我也说不出实际场景
    ZoR
        10
    ZoR  
       2020-04-23 13:46:17 +08:00
    刚想骂街 然后看到外包那就不新奇了 滑稽~
    jugelizi
        11
    jugelizi  
       2020-04-23 13:47:46 +08:00 via iPhone
    php 的程序员大多这样
    ZoR
        12
    ZoR  
       2020-04-23 13:49:21 +08:00
    楼上的 我所接触 java 这么干的也不少 少泼脏水
    madpecker009
        13
    madpecker009  
    OP
       2020-04-23 14:01:24 +08:00
    @ZoR 如果不外包呢。。你是怎么解决的,分享下呗
    madpecker009
        14
    madpecker009  
    OP
       2020-04-23 14:01:37 +08:00   ❤️ 1
    @jugelizi 阴阳人烂屁股
    ZoR
        15
    ZoR  
       2020-04-23 14:04:49 +08:00
    答案楼上也有 最简单的 用 in 不就解决了
    DoUSeeMe
        16
    DoUSeeMe  
       2020-04-23 17:57:40 +08:00
    能一次取的就一次取,取完再做处理
    anUglyDog
        17
    anUglyDog  
       2020-04-23 22:35:17 +08:00
    你可以把数据库和服务端应用放一个机器上或者一个机房,代码再烂也不会慢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2817 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 09:21 · PVG 17:21 · LAX 01:21 · JFK 04:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.