Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL查询以获得类似的喜好_Mysql_Join - Fatal编程技术网

MySQL查询以获得类似的喜好

MySQL查询以获得类似的喜好,mysql,join,Mysql,Join,我正在设计一个简单的体系结构,其中我有一个存储用户和他们喜欢的某些元素的表,因此我的表结构如下: +---------+---------+ | user_id | like_id | +---------+---------+ | 1 | 4 | | 2 | 2 | | 4 | 4 | | 4 | 3 | | 5 | 4 | | 6 | 7 | |

我正在设计一个简单的体系结构,其中我有一个存储用户和他们喜欢的某些元素的表,因此我的表结构如下:

+---------+---------+
| user_id | like_id |
+---------+---------+
|       1 |       4 |
|       2 |       2 |
|       4 |       4 |
|       4 |       3 |
|       5 |       4 |
|       6 |       7 |
|       7 |       5 |
|      34 |       6 |
|       3 |       8 |
|       2 |       3 |
|       2 |       5 |
|       1 |       3 |
|       1 |      10 |
|       1 |      12 |
|       2 |      10 |
+---------+---------+
现在我需要的是任何用户的
id
(比如说
user\u id
=1),我需要一个查询来获取所有其他用户,这些用户与1有相似的喜好

因此,在用户的输出中,id=1将是:

+---------------------------+------------------------+----------------+
|  users_with_common_likes  |   no_of_common_likes   |  common_likes  |
+---------------------------+------------------------+----------------+
|      4                    |       2                |      3,4       |
|      2                    |       2                |      3,10      |
|      5                    |       1                |        4       |
+---------------------------+------------------------+----------------+
我所取得的成就: 我可以使用如下子查询完成此操作:

SELECT user_id
FROM  `user_likes` 
WHERE  `like_id` 
IN (
   SELECT GROUP_CONCAT(  `like_id` ) 
   FROM user_likes
   WHERE user_id =1
)
AND user_id !=1
LIMIT 0 , 30
然而,这个查询并没有给出所有用户,它遗漏了用户_id=2,该用户与用户_id=1具有相同的id 3

我不知道如何找到剩下的两列

另外,我觉得这不是最好的方法,因为这个表将包含数千个数据,并且可能会影响系统性能

我想用一个Mysql查询来实现这一点


这假设一个PK是在用户\u id上形成的,比如\u id

SELECT y.user_id
     , GROUP_CONCAT(y.like_id) likes
     , COUNT(*) total 
  FROM my_table x 
  JOIN my_table y 
    ON y.like_id = x.like_id 
   AND y.user_id <> x.user_id 
 WHERE x.user_id = 1 
 GROUP 
    BY y.user_id;
选择y.user\u id
,组_CONCAT(y.like_id)喜欢
,总数(*)
从我的表x
加入我的桌子
在y.like_id=x.like_id上
和y.user\u id x.user\u id
其中x.user_id=1
团体
按y.user\u id;