2013-11-15 92 views
1

我正在嘗試構建一個項目,您可以像其他人的圖片一樣,並且當其他人也喜歡您的圖片時,您可以匹配。就像你知道的Tinder應用程序一樣。從表1中選擇記錄取決於表2

現在,我取1張照片就像這樣:

SELECT id, picture_path, profile_picture, username 
     FROM tusers 
     WHERE profile_picture IS NOT NULL 
      AND settings LIKE '1,%' 
      AND sex = :sex 
      AND last_visit BETWEEN CURDATE() - INTERVAL 21 DAY AND CURDATE() 
      AND dob BETWEEN :dob - INTERVAL 5 YEAR AND :dob2 + INTERVAL 5 YEAR 
LIMIT 1 

不過,如果你已經喜歡或PASSED某人的照片,我不希望它再次顯示給你。我不知道如何做這部分(現在,我已經Liked()和alreadyPassed()函數,我只做一個標題(「位置」)重定向,如果他們返回true,但這將失敗,當你喜歡/通過了所有的照片)。

我有另一個表與這些列:iduser1_iduser2_idlikedpassedmatched

當你喜歡或通過圖片,1被插入在相應的列中。

user1_id是你的ID。 user2_id是另一個人的ID。

瞭解上述信息後,您將使用什麼樣的查詢(或邏輯)來確保您只顯示正確的人員(您並不喜歡或已經通過)?

回答

1

提出了內部查詢好得多假設你有2個表

USR

id username 
1 a 
2 b 
3 c 
4 d 

喜歡

id user1 user2 liked 
1 1  4   1 
2 1  3   1 

假設你的ID爲1,從表喜歡它看來你很喜歡C,d。因爲1(a)是你只需要B中輸出自己的ID,你的查詢會如下

SELECT * 
FROM usr 
WHERE id NOT 
IN (

SELECT user2 
FROM liked 
WHERE user1 =1 
) 
and id!=1 

假設1將來自會話

+0

非常好,工作得很好。非常感謝! –

+0

哪一列最適合索引(在'喜歡'表中)? –

+0

我在想'user1'。 –

0

您可以使用MySQL加盟與其他表獲得基於另一個

在上面的話,你可以參加第一表ID從一個表中的數據user1_id,user2_id把其中的喜歡條款,過去,匹配

To know more about mysql joins

嘗試本作加入比由ersumit $loggedINuser_id='2';//take from session $sql="SELECT tu.id, tu.picture_path, tu.profile_picture, tu.username FROM tusers tu LEFT JOIN secondtable st ON tu.id=st.user2_id WHERE tu.profile_picture IS NOT NULL AND tu.settings LIKE '1,%' AND tu.sex = :sex AND tu.last_visit BETWEEN CURDATE() - INTERVAL 21 DAY AND CURDATE() AND tu.dob BETWEEN :dob - INTERVAL 5 YEAR AND :dob2 + INTERVAL 5 YEAR AND st.user1_id != '".$loggedINuser_id."' LIMIT 1";

+0

我無法彌補我的查詢與加入。我相信我很快就能理解它,但是你能爲我的案例想出一個簡單的例子嗎? –

+0

由於我們不知道其他人的ID(由user2_id列表示),我不確定JOIN是否有效。 –

+0

@DanyP你可以請顯示錶結構和你想要顯示什麼,第一個用戶或第二個用戶,一旦我有你的想法寫一個查詢將只需要五分鐘 – Veerendra

相關問題