1

私は2つのモデルを持っています:

  1. 製品
  2. クリック

クリック数が x を超えるすべての商品を取得したいと考えています。

テーブルは次のようになります。

Products

id 

Clicks

id | product_id

Ruby では、コードは次のようになりますproducts.select {|p| p.clicks.size > x}。mysql に対して同様のクエリを作成するにはどうすればよいでしょうか?

ありがとう!

4

2 に答える 2

1

これを効率的に行うには、カウンター キャッシュの使用を検討することをお勧めします。ActiveRecord にはこの概念のサポートが組み込まれており、サブクエリを実行する必要がなくなります。

いくつかのリンク:

于 2013-01-28T23:53:48.013 に答える
0

これを試して:

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
于 2013-01-28T23:48:00.677 に答える