今天我有一项兴趣任务 - 实现某些团队对数据库的搜索,并按照最相关的标准对其进行排序
我们需要为查找具有最相似兴趣的用户创建查询 例如:
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;
...
我不知道如何很好地组织它,有人可以帮助我吗? 谢谢!
答案 0 :(得分:2)
一种方法
计算php中常见的兴趣数量
例如,使用count(array_intersect($userInterestsIds, $wantedIds))
您拥有所有想要的信息,并根据需要显示
答案 1 :(得分:1)
我建议你使用简单的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;
希望这个帮助