Mysql 检查两个用户是否喜欢彼此的项目
我有三张桌子: 用户Mysql 检查两个用户是否喜欢彼此的项目,mysql,sql,Mysql,Sql,我有三张桌子: 用户 +----+------+ | id | name | +----+------+ | 1 | Foo | | 2 | Bar | | 3 | La | +----+------+ +----+-------+ | id | owner | +----+-------+ | 1 | 2 | | 2 | 1 | | 3 | 2 | +----+-------+ +----+------+---------+---------+
+----+------+
| 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 |
+----+------+---------+---------+
项目
+----+------+
| 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 |
+----+------+---------+---------+
投票
+----+------+
| 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 |
+----+------+---------+---------+
现在,我想写一个查询,检查两个特定的用户ID是否彼此相似
我希望获得两个匹配项的ID
编写此查询最有效的方法是什么?我已经创建了一个SQLFIDLE:我首先要做一个简单的连接,以获得一个用户列表和他们喜欢的用户
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
将这两个要素组合在一起,您将得到:
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;
您不清楚您想要的是哪种输出,但这将输出一个包含两列的表,其中每个人都有一个相互类似的列表
但是,可能有一个更有效的方法不涉及子查询。您想要布尔值(num行)或recods of like?您是否确实尝试过自己编写查询?请告诉我们你已经做出了什么努力。