【发布时间】:2017-06-19 01:47:24
【问题描述】:
我有一个带有图片的网站,图片可以有标签。许多图像也可以具有相同的标签。所以两张图片可以有标签“绘画”。
我有一个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]:未找到基表或视图:1146 表 'commendme.image_tag' 不存在 (SQL: select count(*) as aggregate 来自
tags内部连接image_tag上tags.id=image_tag.tag_id其中created_at>= 2017-06-16 02:44:02 订单 bycountdesc 限制 3)
所以我尝试切换代码以反映 images_tag 表(而不是 image_tag,我猜这是 fubar 的拼写错误),但又遇到了另一个错误:
SQLSTATE[42S22]:未找到列:1054 未知列“计数”在 'order 子句' (SQL: select count(*) as aggregate from
tagsinner 在tags.id上加入images_tag=images_tag.tag_idcreated_at>= 2017-06-16 02:45:15 order bycountdesc limit 3) (看法: C:\xampp\htdocs\series\commend-me\CommendMe\resources\views\home.blade.php)
编辑 2:
尝试 fubar 的最后一次编辑后出现新错误:
SQLSTATE[42S22]:未找到列:1054 未知列 'image_count' 在“顺序子句”中(SQL:从
tags内部选择计数(*)作为聚合 在tags.id上加入images_tag=images_tag.tag_idcreated_at>= 2017-06-16 02:55:17 group bytags.idorder byimage_countdesc 限制 3) (查看: C:\xampp\htdocs\series\commend-me\CommendMe\resources\views\home.blade.php)
【问题讨论】:
-
您收到错误
unknown column 'image_count',因为您忘记重命名别名,因此请在查询中更改:COUNT(images_tag.id) AS image_count。