如何使用 laravel 使用 CONCAT 和 COUNT 从数据库中获取
how to fetch from db with laravel using CONCAT and COUNT
在数据库中我有 table 用户 这样的:
// id // name // street // house
--------------------------
// 1 // name1 // street1 // 1
// 2 // name2 // street1 // 1
// 3 // name3 // street1 // 1
// 4 // name4 // street2 // 2
// 5 // name5 // street3 // 3
// 6 // name6 // street4 // 4
// 7 // name7 // street5 // 5
我需要做出选择,我将获得 完整地址 和 具有该地址 的记录数(按降序排列) users_ids 数组中的用户。结果应如下所示:
address number
'street1 1' 3
'street2 2' 1
'street3 3' 1
'street4 4' 1
'street5 5' 1
在 laravel 我使用查询:
$recordsByAddresses = DB::table('users')
->whereIn('id', $users_ids)
->select(DB::raw("CONCAT(street, ' ', house) AS address"), DB::raw("COUNT(CONCAT(street, ' ', house)) AS number"))
->orderBy('number', 'desc')
->get();
结果我只得到一个第一个地址和所有地址的数量:
address number
'street1 1' 7
未经测试,但这可能有效:
$recordsByAddresses = DB::table('users')
->whereIn('id', $userIds)
->select(
DB::raw('CONCAT(street, " ", house) AS address'),
DB::raw('count(*) as total')
)
->groupBy('address')
->orderBy('total', 'desc')
->get();
在数据库中我有 table 用户 这样的:
// id // name // street // house
--------------------------
// 1 // name1 // street1 // 1
// 2 // name2 // street1 // 1
// 3 // name3 // street1 // 1
// 4 // name4 // street2 // 2
// 5 // name5 // street3 // 3
// 6 // name6 // street4 // 4
// 7 // name7 // street5 // 5
我需要做出选择,我将获得 完整地址 和 具有该地址 的记录数(按降序排列) users_ids 数组中的用户。结果应如下所示:
address number
'street1 1' 3
'street2 2' 1
'street3 3' 1
'street4 4' 1
'street5 5' 1
在 laravel 我使用查询:
$recordsByAddresses = DB::table('users')
->whereIn('id', $users_ids)
->select(DB::raw("CONCAT(street, ' ', house) AS address"), DB::raw("COUNT(CONCAT(street, ' ', house)) AS number"))
->orderBy('number', 'desc')
->get();
结果我只得到一个第一个地址和所有地址的数量:
address number
'street1 1' 7
未经测试,但这可能有效:
$recordsByAddresses = DB::table('users')
->whereIn('id', $userIds)
->select(
DB::raw('CONCAT(street, " ", house) AS address'),
DB::raw('count(*) as total')
)
->groupBy('address')
->orderBy('total', 'desc')
->get();