我有一个网站的图像,和图像可以有标签。许多图像也可以具有相同的标签。所以2张图片可以有标签“绘画”。Laravel/SQL按人气/趋势排序
我有一个images
表,一个tags
表和一个images_tag
数据透视表。
的images_tag
表具有列:id
,images_id
,tag_id
和created_at
。
我想要的是能够基本上找到哪些标签趋势,例如在过去的72小时内。
这意味着我想有一个查询,发生在过去72小时
$trendingTags = ImagesTag::where('created_at', '>=', Carbon::now()->subHours(72))
使用的所有标签和需要,比方说,前3名最常用的标签。所以在这种情况下,
$trendingTags = ImagesTag::where('created_at', '>=', Carbon::now()->subHours(72))
->orderBy('tag_id most frequently used', 'desc')
->take(3);
我该怎么做这项工作?
编辑:
针对FUBAR的回答,我试过如下:
控制器:
$trendingTags = Tag::selectRaw('tags.*, COUNT(image_tag.id) AS count')
->join('image_tag', 'tags.id', '=', 'image_tag.tag_id')
->where('created_at', '>=', Carbon::now()->subHours(72))
->orderBy('count', 'desc')
->take(3);
return view('home')
>with('trendingTags', $trendingTags)
这给我的错误:
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'commendme.image_tag' doesn't exist (SQL: select count(*) as aggregate from
tags
inner joinimage_tag
ontags
.id
=image_tag
.tag_id
wherecreated_at
>= 2017-06-16 02:44:02 order bycount
desc limit 3)
所以我尝试切换代码以反映images_ta摹表(而不是IMAGE_TAG,我猜是FUBAR的部分错字),我得到了另一个错误:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'count' in 'order clause' (SQL: select count(*) as aggregate from
tags
inner joinimages_tag
ontags
.id
=images_tag
.tag_id
wherecreated_at
>= 2017-06-16 02:45:15 order bycount
desc limit 3) (View: C:\xampp\htdocs\series\commend-me\CommendMe\resources\views\home.blade.php)
编辑2:尝试FUBAR最后的编辑后
新的错误:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'image_count' in 'order clause' (SQL: select count(*) as aggregate from
tags
inner joinimages_tag
ontags
.id
=images_tag
.tag_id
wherecreated_at
>= 2017-06-16 02:55:17 group bytags
.id
order byimage_count
desc limit 3) (View: C:\xampp\htdocs\series\commend-me\CommendMe\resources\views\home.blade.php)
感谢您的回答。不幸的是你的代码给了我一些错误。我编辑了主帖以显示这些错误。 –
@FelixMaxime - 我已经更新了我的答案。 – fubar
试过了。另一个错误。再次编辑主要帖子。 –