Doctrine query builder 按兴趣查找
Doctrine query builder find by interests
今天我有一个感兴趣的任务——实现一些组对数据库的搜索,并按最相关的标准对其进行排序
- 我们在 Symfony 上有 2 个具有多对多关系的实体(用户和兴趣)
我们需要创建查询以查找兴趣最相似的用户
例如:
用户 1 有兴趣 [1,2,3,4,5]
用户 2 有兴趣 [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;
...
我不知道如何很好地组织它,有人可以帮助我吗?
谢谢!
一种方法
- 在您的列表中查找至少有 1 个兴趣的用户(简单 Dql 查询)
计算 php 中共同兴趣的数量。
例如使用 count(array_intersect($userInterestsIds, $wantedIds))
你想要的信息都有了,想怎么显示就怎么显示
我建议您使用简单的 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;
希望对您有所帮助
今天我有一个感兴趣的任务——实现一些组对数据库的搜索,并按最相关的标准对其进行排序
- 我们在 Symfony 上有 2 个具有多对多关系的实体(用户和兴趣)
我们需要创建查询以查找兴趣最相似的用户 例如:
用户 1 有兴趣 [1,2,3,4,5]
用户 2 有兴趣 [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;
...
我不知道如何很好地组织它,有人可以帮助我吗? 谢谢!
一种方法
- 在您的列表中查找至少有 1 个兴趣的用户(简单 Dql 查询)
计算 php 中共同兴趣的数量。
例如使用count(array_intersect($userInterestsIds, $wantedIds))
你想要的信息都有了,想怎么显示就怎么显示
我建议您使用简单的 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;
希望对您有所帮助