教义查询生成器按兴趣查找

安德鲁·德文尼尔

今天,我有一个有趣的任务-通过一些小组实现对DB的搜索并按照最相关的标准对其进行排序

  1. 我们在Symfony上与ManyToMany关系有2个实体(用户和兴趣)
  2. 我们需要创建查询来查找兴趣最相似的用户,例如:

    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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章