2016-09-06 53 views
0

我目前正在构建一个匹配系统。这意味着我需要用查询来识别依赖于用户的匹配。例如:匹配系统

  1. 用户X想要产品A和在返回具有产品B
  2. 用户Y希望产品B和具有产品A在返回

=>所以这将是可能的匹配和用户X有一个用户Y想要的和相反的产品。

现在我想到的是如何构建的数据库表和一个可能的选择查询可能看起来怎么样:

tbl_offers 

offer_ID | user_ID | want_ID | has_ID 

然后拿到比赛我会列want_ID对列has_ID比较,像即:

$sql = 'SELECT * FROM tbl_offers WHERE user_ID = 1 AND want_ID = has_ID'; 

我不知道这个模式是我的情况下,最好的解决办法,特别是是否会有性能问题时,记录的增加。如果上述方法可行,您能否给我一个反馈意见?

谢谢!

+0

你肯定'其中USER_ID =“1”'?双引号? (我不确定,因为在大多数情况下,'1'将会是一个列名,那么你必须写'WHERE user_ID ='1''并且避开这个。)当它是一个int列时)你应该只写'WHERE user_ID = 1' –

+1

这看起来像一个糟糕的设计。 – Strawberry

+0

@Strawberry你有另一种设计的建议:)? – Jimmy

回答

0

如果我很好,你需要你的表连接到自己是这样的:

SELECT 
    * 
FROM 
    tbl_offers AS A 
     INNER JOIN 
    tbl_offers AS B 
     ON A.want_ID = B.has_ID AND A.has_ID = B.want_ID 
+0

当然你可能在这里得到重复,因为一个人的want_id可能是很多人has_id –

+0

这很好,我想显示所有匹配给用户。为了实现这一点,我只需要添加一个where子句给你的建议查询?像'WHERE user_ID = 1'? – Jimmy

+0

我认为:'A.user_ID = 1或B.user_ID = 1' –