リーダーボードページを作成しようとしていますが、著者によるエントリをグループ化する方法を見つけるのが難しいです。
私はそこにSQLのサム関数を取得するためのプラグインを作成することができましたが、私は今、作成者のグループを追加し、それにスコアDESCで注文する必要があります。
First steps were taken from here:
Ability to SUM() or GROUP BY from the template or
ElementCriteriaModel
私が最終的に望むのは、次のようなクエリです(もちろん簡単です):
SELECT author, SUM(content.score) as score FROM content Group By Author Order By score DESC
これを “ネイティブ”にする方法はありますか、それとも独自のクエリを書く必要がありますか?
ベストアンサー
これが最善の方法であるかどうかは不明ですが、この小さな関数をVariableクラスに作成しました。配列に必要なすべての情報(ユーザー名とスコア)を取得します。私が必要とするものに対してうまく動作します。
public function leaderboard(ElementCriteriaModel $criteria)
{
$query = craft()->elements->buildElementsQuery($criteria);
if ($query)
{
$query
->select("authorId, SUM(field_score) as score, users.username as username")
->join("users", "users.id = authorId" )
->group("authorId")
->order("score DESC");
return $query->queryAll();
}
}