我是编程新手。我有桌子
check_1,check_2,check_3 ..etc
------------------------------
1 1 1
0 0 1
1 0 1
我想要这个输出:
column_name, count_true
-----------------------
check_1 2
check_2 1
check_3 3
我已经在MySQL中使用union函数尝试过它,但是当我尝试在laravel中应用它时,我遇到了Union的麻烦。是否存在可以产生此类输出的无联合查询?
预先感谢
答案 0 :(得分:0)
您可以这样做。 db中的一个查询
$records = DB::table('your_table')->get();
$check1Count = $records->where('check_1', 1)->count();
$check2Count = $records->where('check_2', 1)->count();
$check3Count = $records->where('check_3', 1)->count();
......
或
$records = DB::table('your_table')->get();
$columns = ['check_1', 'check_2', 'check_3', ...];
$data = [];
foreach($columns as $column) {
$data[] = [
'column_name' => $column,
'count_true' => $records->where($column, 1)->count();
];
}
您也可以这样做,但是查询很多
$check1Count = DB::table('your_table')
->selectRaw('COUNT(check_1) as count')
->where('check_1', 1)
->first()
->count;
$check2Count = DB::table('your_table')
->selectRaw('COUNT(check_2) as count')
->where('check_2', 1)
->first()
->count;
.....
答案 1 :(得分:0)
标准化方法可能如下所示:
response_id checkbox
1 1
1 2
1 3
2 3
3 1
3 3
答案 2 :(得分:0)
您不需要并集,只需查询所有数据并在Laravel上进行处理即可。假设您使用$ data变量雄辩地查询了所有数据,那么您应该这样做:
//preparing a variable to hold all 24 database field value
$total = [];
foreach ($data as $d) {
//do this for all 24 database field
if ($d->check_1) {
$total[1]++;
}
if ($d->check_2) {
$total[2]++;
}
...
}
通过这种方式,您无法检查$ total [index]变量的结果。是的,有一种更好的方法来存储数据,而不是为每个用户保存所有字段。您可以将所有检查的值存储在数据库中,如下所示:
user_id checkbox_id
1 3
1 5
1 9
1 24
2 23
3 2
3 3
效率更高,因为您无需保存未选中的复选框值(如果他们更有可能不选中大部分复选框)。