今天,我有一个有趣的任务-通过一些小组实现对DB的搜索并按照最相关的标准对其进行排序
我们需要创建查询来查找兴趣最相似的用户,例如:
user1有兴趣[1,2,3,4,5]
user2有兴趣[1,2,4,5,7]
user3有兴趣[3,5]
我们尝试找到感兴趣的用户[2,6,7],结果必须为:
[user2, user1, user0]
user2 - 2 similar interests
user1 - 1 similar interests
user3 - 0
代码示例:
class User
{
// ...
/**
* Many Users have Many Interests.
* @ManyToMany(targetEntity="Interest")
* @JoinTable(name="users_interests",
* joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={@JoinColumn(name="interest_id", referencedColumnName="id")}
* )
*/
private $interests;
...
我不知道如何很好地组织它,有人可以帮我吗?谢谢!
我建议您使用简单的sql(而不是DQL)以便仅提取符合条件的用户的id。一个简单的查询可以是:
select distinct user_id, count(*) from users_interests
where interest_id in (1,3,5) --- your interest ids
group by 1
order by 2 DESC;
希望有帮助
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句