假设我正在建立一个约会应用程序,根据用户的约会目标为用户提供建议。假设用户在数据库中表示如下:
Column | Type
---------------------+-----------------------------
id | bigint
updated_since | timestamp
goal | text
让我们说goal
的值可以是四件事之一:
seeking_sugar_daddy
seeking_sugar_mama
be_sugar_daddy
be_sugar_mama
现在,假设我有一个定期运行的推荐引擎,并根据目标和其他一些标准(身高,年龄等)为所有用户生成匹配。推荐引擎将一对用户作为输入并生成分数。
生成推荐引擎输入列表的最有效方法是什么?唯一有效的输入是具有匹配目标的对 - 例如,如果User A
具有目标seeking_sugar_daddy
,并且User B
具有将成为有效输入的目标be_sugar_daddy
,但seeking_sugar_daddy
和be_sugar_mama
不是有效的一对。
一旦我从数据库中获取所有用户,我应该如何对它们进行分组?或者有没有办法在数据库中执行此操作?
答案 0 :(得分:1)
您需要relationship
表来配置属性。 (当然你使用id没有文字)
atributeA | atributeB
--------------------------------------------
seeking_sugar_daddy | be_sugar_daddy
be_sugar_daddy | seeking_sugar_daddy
....
然后你匹配这样的用户
SELECT *
FROM users u1
JOIN relationship r
ON u1.goal = r.atributeA
JOIN users u2
ON r.attributeB = u2.goal
注意:这允许您稍后添加更多属性,而不是硬编码查询条件。
此外,我复制/反转关系以使who are the match for 'UserA'
之类的搜索更容易。但如果您只想要所有用户匹配,请不要复制。
答案 1 :(得分:0)
让我们将您的目标缩写为"A"
,"C"
,"G"
,"T"
,其中A匹配T,C匹配G.以下是您的匹配:
SELECT * from users AS a JOIN users AS b
ON (a.goal = "A" AND b.goal = "T") OR (a.goal = "C" and b.goal = "G")
请注意,由于左侧和右侧显示相同的表格,因此无需检查a.goal = "T"
等。