V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
madpecker009
V2EX  ›  程序员

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

  •  
  •   madpecker009 · Apr 23, 2020 · 2685 views
    This topic created in 2199 days ago, the information mentioned may be changed or developed.

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

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