2016-09-06 93 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' –