0

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

  1. 製品
  2. デイリーログ
  3. クリック

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

Products
id

Daily Logs
id | product_id | price

Clicks
id | product_id | daily_log_id

レポート用に、x コスト (クリック単価に基づく) を超えて発生したすべての製品を取得したいと考えています。

Ruby では、コードは次のようになります。

products.select do | p |
  cost = 0
  p.daily_logs.each do | dlog |
    cost += dlog.clicks.count * dlog.price
  end

  cost > x ? true : false      
end

mysql に対して同様のクエリを作成するにはどうすればよいですか?

ありがとう!

4

1 に答える 1

0

私はこれがあなたが探しているものだと思います:

SELECT dl.product_id AS `product_id`, COUNT(c.id) AS `total_clicks`, SUM(dl.price) AS `total_price`
FROM daily_logs AS dl
INNER JOIN clicks AS c on dl.id = c.daily_log_id
WHERE `total_price` > ?
GROUP BY `product_id`

ここにはidフィールドしかないため、productsテーブルに参加しなかったことに注意してください。このフィールドは、daily_logsテーブルでも使用できます。productsテーブルに実際に必要な情報を含むフィールドがさらにある場合は、そのテーブルを結合して、必要なフィールドを選択することもできます。

于 2013-01-29T00:18:44.377 に答える