因此,通常您希望选择所有喜欢相同产品的用户,然后通过计算每个产品的喜欢数量来获得他们喜欢的产品,并输出最喜欢的产品。
那么这在 SQL 中会是什么样子呢?
让我们看看这在 SQL 中会是什么样子:
第 1 步:获取您的收藏夹的 id
SELECT it.item_id FROM `item_users` it WHERE it.user_id = %current_user%
第二步:获取喜欢相同商品的用户
SELECT u.id FROM `item_users` it, `users` u WHERE it.item_id IN (
SELECT it.item_id FROM `item_users` it WHERE it.user_id = %current_user%
) AND it.user_id != %current_user% AND u.id = it.user_id GROUP BY it.user_id
第 3 步:获取他们的最爱
整个 SQL 查询如下所示:
SELECT i.* FROM `items` i, `item_users` it WHERE it.user_id IN (
SELECT u.id FROM `item_users` it, `users` u WHERE it.item_id IN (
SELECT it.item_id FROM `item_users` it WHERE it.user_id = %current_user%
) AND it.user_id != %current_user% AND u.id = it.user_id GROUP BY it.user_id
) AND i.id = it.item_id GROUP BY i.id ORDER BY count(*) DESC
您的任务是添加对结果的限制...
更新:我猜您想首先获得最受欢迎的产品。我已更改查询以添加该功能(添加ORDER BY count(*) DESC
到末尾)
这是一个复杂的查询,使用 ActiveRecord 来实现它会很慢,甚至更复杂,所以我建议您按原样使用查询。