Ich weiß, wie man COUNT findet, AVG Funktionen funktioniert wollen Ich versuche hier zu erreichen ist eine andere Operation, nachdem die Zählung gefunden wurde, siehe meinen Code unten.Schnellste Möglichkeit, die Anzahl ausgewählter Objekte in MySql zu finden?
Article::where('id','=',130)
->select(
'articles.*',
DB::raw('(SELECT avg(rating) FROM rating WHERE rateable_id = articles.id AND type = "article" ) as avgRating'),
DB::raw('(SELECT count(*) FROM comments WHERE commentable_id = articles.id AND commentable_type = "article") as commentCount'),
DB::raw('(SELECT count(*) FROM article_favourites WHERE article_id = articles.id) as favouriteCount')
)
->get();
die obige Abfrage verwenden, kann ich 'avgRating', 'commentCount' get 'favouriteCount', aber ich möchte auch die Summe dieser drei .. also etwas bekommen, wie:
(avgRating + commentCount + favouriteCount) AS Sum
Was ist der beste Weg, dies zu tun? PS: Ich habe bereits eine Lösung
DB::raw('((SELECT avg(rating) FROM rating WHERE rateable_id = article.id AND type = "article")+(SELECT count(*) FROM comments WHERE commentable_id = article.id AND commentable_type = "'.$type.'")+(SELECT count(*) FROM article_favourites WHERE article_id = article.id)) as totalCount'),
Aber ich bin auf der Suche nach einer besseren Lösung
IMHO überdenken Sie dies, fügen Sie sie nur in PHP. In MySQL müssten Sie die Unterabfragen wiederholen und sie als vierten Ausdruck in Ihrer Abfrage hinzufügen. – Shadow
Ich muss 50000 Zeilen mit dem Gesamtergebniswert sortieren .. wie wäre es damit? –
Dann möchten Sie vielleicht fließend verwenden. –