/ / Laravel-selectRawカウント-IF NULLをゼロに設定-laravel、laravel-5.2

Laravel - selectRaw count - IF NULLゼロに設定する - laravel、laravel-5.2

私は製品のフィルタリングに取り組んでいますが、実際に記録されたビューがある製品のみを取得しているようです。

「IF NULL = 0」に設定するにはどうすればよいですか?

ここに私のコード:

if ($request->sort == "views") {
$query->leftJoin("analytics", "foreign_id", "=", "ads.id");
$query->selectRaw("ads.*, IFNULL(count(analytics.id),0) as views");
$query->orderBy("views", "$sort_order");
}

私のDBは次のようになります。 id | IP | foreign_id | foreign_type | updated_at | created_at

現在、DBには1つの行があり、そのIDを持つ製品が唯一表示されています。

よろしくお願いします。

回答:

回答№1は2

解決策はグループ化することでしたが、完全に機能しました。

if ($request->sort == "views") {

$query->leftJoin("analytics", "foreign_id", "=", "ads.id");
$query->selectRaw("ads.*, count(analytics.id) as views");
$query->orderBy("views", "$sort_order");
$query->groupBy("ads.id");

}

回答№2の場合は0

おもう COALESCE (MySQLを想定)はあなたが探しているものです。これを試してください:

if ($request->sort == "views") {
$query->leftJoin("analytics", "foreign_id", "=", "ads.id");
$query->selectRaw("ads.*, COALESCE(count(analytics.id),0) as views");
$query->orderBy("views", "$sort_order");
}

回答№3の場合は0
if ($request->sort == "views") {
$query->leftJoin("analytics", "foreign_id", "=", "ads.id");
$query->whereNotNull("analytics");
$query->selectRaw("ads.*, analytics.id as views");
$query->orderBy("views", "$sort_order");
}

現時点ではこれを提案として残します-あなたが望むようには機能しないでしょうが、それはただいくつかの指示を与えるだけです