私は2つのモデルを持っています:
- 製品
- クリック
クリック数が x を超えるすべての商品を取得したいと考えています。
テーブルは次のようになります。
Products
id
、
Clicks
id | product_id
Ruby では、コードは次のようになりますproducts.select {|p| p.clicks.size > x}
。mysql に対して同様のクエリを作成するにはどうすればよいでしょうか?
ありがとう!
私は2つのモデルを持っています:
クリック数が x を超えるすべての商品を取得したいと考えています。
テーブルは次のようになります。
Products
id
、
Clicks
id | product_id
Ruby では、コードは次のようになりますproducts.select {|p| p.clicks.size > x}
。mysql に対して同様のクエリを作成するにはどうすればよいでしょうか?
ありがとう!
これを効率的に行うには、カウンター キャッシュの使用を検討することをお勧めします。ActiveRecord にはこの概念のサポートが組み込まれており、サブクエリを実行する必要がなくなります。
いくつかのリンク:
これを試して:
SELECT *
FROM Products
WHERE Id IN
(
SELECT
P.Id
FROM Products P
JOIN Clicks C
ON P.Id = C.Product_ID
GROUP BY P.ID
HAVING COUNT(1) > x
) A
またはこれ、製品IDのみが必要な場合
SELECT
P.Id
FROM Products P
JOIN Clicks C
ON P.Id = C.Product_ID
GROUP BY P.ID
HAVING COUNT(1) > x