背景: 大概10000条数据表中有个 ‘status’ 字段,状态为 0 或 1, 需要把表中的数据按status进行分类。
即:我需要得到这样一个数组(不要纠结于我的命名。。。):
[
0 => [
['id' => 1, 'status' => 0, 'name' => 'zhangsan'],
['id' => 3, 'status' => 0, 'name' => 'zhangsan2'],
......此处省略n行
],
1 => [
['id' => 1, 'status' => 1, 'name' => 'zhangsi'],
['id' => 3, 'status' => 1, 'name' => 'zhangsi2'],
......此处省略n行
],
]
方法一 : mysql 查询一次,利用php遍历分类成数组(不考虑使用php内置array函数)
$sql = 'select * from table';
$res = $model->findBySql($sql)->all();
$arr[0] = [];
$arr[1] = [];
foreach ($res as $var) {
switch ($var->status) {
case 0 :
$arr[0][] = $var;
break;
case 1 :
$arr[1][] = $var;
break;
}
}
return $arr;
方法二 : mysql分别查询两次
$sql0 = 'select * from table where status=0';
$sql1 = 'select * from table where status=1';
$arr[0] = $model->findBySql($sql0)->all();
$arr[1] = $model->findBySql($sql1)->all();
return $arr;
这两种方式那个快?是绝对的吗?
若表中有十万条,一百万条数据呢?
若 status 有 10 种,100 种,1000种呢?