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?您是否确实尝试过自己编写查询?请告诉我们你已经做出了什么努力。