所以我有以下代码:
public function scopePopular($query, $limit = 10)
{
$query->leftJoin(DB::raw('(SELECT COUNT(id) visits, UNIQUE(ip_address) FROM `visitors`) visitors'), function($join)
{
$join->on('visitors.visitorable_id', '=', 'db885a18-f0b7-4f55-9d93-743fbb5d9c94');
$join->where('visitors.visitorable_type', '=', 'App\Profile');
});
return $query;
}
产生以下查询:
select * from `profiles` inner join `profile_genres` on `profiles`.`id` = `profile_genres`.`profile_id` left join (SELECT COUNT(id) visits, UNIQUE(ip_address) FROM `visitors`) visitors on `visitors`.`visitorable_id` = `db885a18-f0b7-4f55-9d93-743fbb5d9c94` and `visitors`.`visitorable_type` = ? where `profile_genres`.`genre_id` = ? and `profiles`.`deleted_at` is null
此查询似乎不起作用,我猜测是由于语法错误而MYSQL在其错误消息中并不完全具体。
SQL错误[1064] [42000]:您的SQL语法出错;检查与您的MySQL服务器版本相对应的手册,以便在
visitors
上使用“UNIQUE(ip_address)FROMvisitors
附近”的正确语法。visitorable_id
=' db885a18 -f0'在第1行
答案 0 :(得分:1)
据我所知,UNIQUE(ip_address)
条款没有像SELECT
这样的构造。你可能想要:
SELECT COUNT(id) visits, ip_address
FROM `visitors`
GROUP BY ip_address