所以我有以下代码:
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 服务器版本相对应的手册,了解在 'UNIQUE(ip_address) FROM
visitors
)on附近使用的正确语法visitors
。visitorable_id
= 'db885a18-f0' 在第 1 行
据我所知,没有像UNIQUE(ip_address)
forSELECT
子句这样的结构。你可能想要:
SELECT COUNT(id) visits, ip_address
FROM `visitors`
GROUP BY ip_address
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句