1

我有两个模型:

  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 回答