2017-12-20 5 views
0

私はRails 5アプリケーションを構築しています。 このアプリでは、私が最も好きな5つのアイデアをすべて取得するクエリを得ました。このクエリは私にもゼロの好きなアイデアを与えます。少なくとも私のようなアイデアだけを得たいと思っています。どうすれば変更できますか?クエリを結合するクエリを追加します

Idea.joins("LEFT OUTER JOIN Likes ON likes.likable_id = ideas.id").group("ideas.id").order("COUNT(likes.id) DESC").take(5) 

すべてに感謝を

更新

を助けるこれは

Idea.joins("INNER JOIN Likes ON likes.likable_id = ideas.id").group("ideas.id").order("COUNT(likes.id) DESC").take(5) 
+0

「LEFT OUTER JOIN」ではなく「INNER JOIN」を使用してみましたか?この方法では、少なくとも1つのアイデアしか得られず、追加のwhere節 –

+0

がうまくいくように見えることはありません!それはなぜ機能するのですか? –

+0

'INNER JOIN'は両方のテーブルで一致する値を持つレコードを選択します。左側のテーブル(table1)からのすべてのレコードと右側のテーブル(table2)からの一致したレコードを返します。一致がなければ、右側から結果はNULLになります。 –

答えて

2

あなたはINNER JOIN代わりのLEFT OUTER JOINを使用する必要がありますが動作するようです。この方法では、少なくとも1つのアイデアだけを得て、追加のwhere節を避けることができます。

レールjoins方法は、 のwheres LEFT OUTER左側テーブル (TABLE1)からキーワード戻りをすべてのレコードをJOIN、両方のテーブル内の値に一致しているレコードを選択デフォルト

INNERによってINNER JOINに参加し

Idea.joins(:likes).group("ideas.id").order("COUNT(likes.id) DESC").take(5) 
右側の表(table2)からの一致したレコード。一致するものがなければ、 の結果は右側からNULLになります。

関連する問題