私は製品のフィルタリングに取り組んでいますが、実際に記録されたビューがある製品のみを取得しているようです。
「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");
}
現時点ではこれを提案として残します-あなたが望むようには機能しないでしょうが、それはただいくつかの指示を与えるだけです