2014-12-04 36 views
0

我有三個表:檢查兩個用戶喜歡對方的項目

用戶

+----+------+ 
| id | name | 
+----+------+ 
| 1 | Foo | 
| 2 | Bar | 
| 3 | La | 
+----+------+ 

項目

+----+-------+ 
| id | owner | 
+----+-------+ 
| 1 |  2 | 
| 2 |  1 | 
| 3 |  2 | 
+----+-------+ 

+----+------+---------+---------+ 
| id | vote | user_id | item_id | 
+----+------+---------+---------+ 
| 1 | 1 |  1 |  1 | 
| 2 | 1 |  2 |  2 | 
| 3 | -1 |  3 |  1 | 
| 4 | 1 |  1 |  2 | 
| 5 | -1 |  3 |  2 | 
+----+------+---------+---------+ 

現在,我希望編寫一個查詢來檢查兩個特定的user_id,就像其他項目一樣。

我希望得到匹配的兩個項目的ID。

什麼是您可以編寫此查詢的最有效方式?我已經創建了一個sqlfiddle:http://sqlfiddle.com/#!2/c09fa

+0

什麼結果你想要一個布爾(num行)或recods的喜歡? – 2014-12-04 21:26:34

+0

你真的試過爲自己編寫查詢嗎?請告訴我們你已經做了什麼努力。 – 2014-12-04 21:28:08

回答

1

我會先做一個簡單的連接來獲取用戶列表和他們喜歡的用戶事物。

SELECT user_id AS id1, items.owner AS id2 FROM votes 
     JOIN items ON items.id=item_id; 

這將給出一個表與2個ID。然後加入這個表與自己,並檢查每個都是平等的。所以

SELECT * FROM temp t1 JOIN temp t2 
    WHERE t1.id1=t2.id2 AND t1.id2=t2.id1 

把2一起,你會得到:

SELECT * FROM 
    (SELECT user_id AS id1, items.owner AS id2 FROM votes 
JOIN items ON items.id=item_id) table1 
JOIN 
    (SELECT user_id AS id1, items.owner AS id2 FROM votes 
JOIN items ON items.id=item_id) table2 
WHERE 
    table1.id1=table2.id2 AND table1.id2=table2.id1; 

你是不是清楚什麼你要找的輸出排序,但將輸出表2列,每個人都在它有一個共同的喜歡。

雖然可能有更高效的方法,但不涉及子查詢。

相關問題