Ich habe eine Website mit Bildern und Bilder können Tags haben. Viele Bilder können auch dasselbe Tag haben. So können 2 Bilder das Tag "malen" haben.Laravel/SQL sortieren nach Beliebtheit/Trending
Ich habe eine images
Tabelle, eine tags
Tabelle, und eine images_tag
Pivot-Tabelle.
Die images_tag
Tabelle enthält die Spalten: id
, images_id
, tag_id
und created_at
.
Was ich will, ist in der Lage, im Wesentlichen zu finden, welche Tags innerhalb, sagen wir, den letzten 72 Stunden Trend sind. , Die Top 3 am häufigsten verwendeten Tags
Dies bedeutet, dass ich eine Abfrage haben wollen, die
$trendingTags = ImagesTag::where('created_at', '>=', Carbon::now()->subHours(72))
und nimmt, sagen wir in den letzten 72 Stunden verwendet, um alle Tags nimmt. Also in diesem Fall
$trendingTags = ImagesTag::where('created_at', '>=', Carbon::now()->subHours(72))
->orderBy('tag_id most frequently used', 'desc')
->take(3);
Wie könnte ich das funktionieren lassen?
Edit:
Als Reaktion auf fubar Antwort, habe ich versucht, die folgenden:
Controller:
$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)
Das bin ich den Fehler gab:
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)
So Ich habe versucht, den Code zu wechseln, um die images_ta widerzuspiegeln g Tabelle (statt image_tag, die ich vermute, ich ist ein Tippfehler auf fubar ist Teil), und ich habe einen anderen Fehler:
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)
EDIT 2:
New Fehler nach zuletzt fubar versucht out :
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)
Danke für die Antwort. Leider gibt mir dein Code einige Fehler. Ich habe den Hauptbeitrag bearbeitet, um diese Fehler anzuzeigen. –
@FelixMaxime - Ich habe meine Antwort aktualisiert. – fubar
Versuchte es. Ein weiterer Fehler. Bearbeitete den Hauptbeitrag erneut. –