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

2020-04-23 09:59:52 +08:00
 madpecker009

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

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();
    
}

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

2228 次点击
所在节点    程序员
17 条回复
lscexpress
2020-04-23 10:25:15 +08:00
优化的方向就是多条 sql 合并为一条,这就得到了优化的效果,具体做法看你怎么去实现
brader
2020-04-23 10:30:30 +08:00
你这个应该可以用 a_colum IN() 吧?
cvl
2020-04-23 10:33:32 +08:00
我之前碰到过这种 , 做法是把查询条件优化成一个数组作为条件。总的来说就是整合到一起去执行 ,得到得结果再去遍历
taaaang
2020-04-23 13:13:04 +08:00
有时候可读性好一点,牺牲一点点资源或者是性能并不是太大的问题
dilu
2020-04-23 13:15:12 +08:00
如果不需要性能,而且还是外包的话,怎么方便怎么写
madpecker009
2020-04-23 13:42:06 +08:00
@brader 是的 但是他们没用 直接这么查询的
madpecker009
2020-04-23 13:42:40 +08:00
@dilu 这么说好像也有道理 反正不是自己的产品
madpecker009
2020-04-23 13:43:01 +08:00
@cvl 好 以后再碰到会这么解决的
madpecker009
2020-04-23 13:43:30 +08:00
@lscexpress 得具体问题。现在让我这么说我也说不出实际场景
ZoR
2020-04-23 13:46:17 +08:00
刚想骂街 然后看到外包那就不新奇了 滑稽~
jugelizi
2020-04-23 13:47:46 +08:00
php 的程序员大多这样
ZoR
2020-04-23 13:49:21 +08:00
楼上的 我所接触 java 这么干的也不少 少泼脏水
madpecker009
2020-04-23 14:01:24 +08:00
@ZoR 如果不外包呢。。你是怎么解决的,分享下呗
madpecker009
2020-04-23 14:01:37 +08:00
@jugelizi 阴阳人烂屁股
ZoR
2020-04-23 14:04:49 +08:00
答案楼上也有 最简单的 用 in 不就解决了
DoUSeeMe
2020-04-23 17:57:40 +08:00
能一次取的就一次取,取完再做处理
anUglyDog
2020-04-23 22:35:17 +08:00
你可以把数据库和服务端应用放一个机器上或者一个机房,代码再烂也不会慢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/665223

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX