我有一個網站的圖像,和圖像可以有標籤。許多圖像也可以具有相同的標籤。所以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
試過了。另一個錯誤。再次編輯主要帖子。 –