欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

关于sql查询的 一些问题

程序员文章站 2022-06-12 11:38:51
...

在写query查询语句时候,经常会想到这个问题:

1,foreach 循环查询

$data = SELECT...;
foreach($data as &$item)
    $item['sub] = SELECT .... WHERE $item['xx'] ....;

2,多表关联 join

先多表联合查询,然后重新组装数据

3,嵌套,子查询


那么问题来了

考虑效率的时候,一般会如何选择,

或者还有其他高效的查询方法;

update:
可能之前表述有问题,现在我重新又撸了一个示例补充:

虚拟了一个场景:
比如一个文章列表,而这个列表有 分类,标题,简介,作者,发布时间等。而这些数据分别在 article ,user,category,等多个表里面。
这时你需要tree 的结构,在view展示。

接上面问题:
为了得到这个数据,最合适的方法是什么呢 ?
ps:从效率来看

1,多层嵌套 foreach 查询;
2,先多表联合查询出结果,然后重新组装需要的数据结构
...
或者其他

先感谢大家的回复,同时欢迎大家说说自己看法。thanks

回复内容:

在写query查询语句时候,经常会想到这个问题:

1,foreach 循环查询

$data = SELECT...;
foreach($data as &$item)
    $item['sub] = SELECT .... WHERE $item['xx'] ....;

2,多表关联 join

先多表联合查询,然后重新组装数据

3,嵌套,子查询


那么问题来了

考虑效率的时候,一般会如何选择,

或者还有其他高效的查询方法;

update:
可能之前表述有问题,现在我重新又撸了一个示例补充:

虚拟了一个场景:
比如一个文章列表,而这个列表有 分类,标题,简介,作者,发布时间等。而这些数据分别在 article ,user,category,等多个表里面。
这时你需要tree 的结构,在view展示。

接上面问题:
为了得到这个数据,最合适的方法是什么呢 ?
ps:从效率来看

1,多层嵌套 foreach 查询;
2,先多表联合查询出结果,然后重新组装需要的数据结构
...
或者其他

先感谢大家的回复,同时欢迎大家说说自己看法。thanks

一般原则是尽量少在循环中操作 SQL,针对你第一个给出的 DEMO 可以使用 SELECT WHERE IN 整合成一次查询。

像这种查询数据量不是太大的话可以将数据合并到一个表中在去查询。
一般来说:

$data = SELECT...;
foreach($data as &$item)
    $item['sub] = SELECT .... WHERE $item['xx'] ....;

你既然这么做了,这个for相信也不是太多,太耗时,如果在加上建了相关索引的话,效率上不存在问题,目测100ms内。

php $uid2User[$val['id']]);
}

// 这里 $resut 是我们需要的
// 这种方法写了长长的一串, 
// 当数据量特别大的时候, 是不允许进行连表的,
// 同时这么写也方便进行缓存

把你主表产生的where条件全部保存起来,生成一个sql,去查附表,然后套两个foreach,将数组重新组合起来。

相关标签: php sql