匹配多个字段的MySQL查询

匹配多个字段的MySQL查询,mysql,Mysql,我有一个数据库,它有一个表,表中有不同的人喜欢的东西。每个like都存储为不同的记录。我在每条记录中唯一的信息是userID,比如eid 搜索将基于当前登录的用户ID。所以我不是把每个人都和每个人配对,而是把每个人和1配对 例如,userID 45在表中可能有likeID 3、likeID 6和likeID 22 我想做的是让表返回,根据它们与其他人匹配的总喜好,以降序排列它们匹配的userid 例如,基于上面的用户45示例,它将查看用户ID 1,并查看它们有多少个likeID 3、likeID

我有一个数据库,它有一个表,表中有不同的人喜欢的东西。每个like都存储为不同的记录。我在每条记录中唯一的信息是userID,比如eid

搜索将基于当前登录的用户ID。所以我不是把每个人都和每个人配对,而是把每个人和1配对

例如,userID 45在表中可能有likeID 3、likeID 6和likeID 22

我想做的是让表返回,根据它们与其他人匹配的总喜好,以降序排列它们匹配的userid

例如,基于上面的用户45示例,它将查看用户ID 1,并查看它们有多少个likeID 3、likeID 6和likeID 22。然后它会转到userid2,看看他们有多少像eid3,像eid6和像eid22……这会为每个人做

然后,它将显示与这3个LIKEID的匹配项超过0的任何结果:

匹配项:

您和UserID 12共享3个相同的喜好

您和UserID 87共享3个相同的喜好

您和userid22共享两个相同的喜好

您和UserID73共享2个smae喜欢的内容

您和UserID 71共享一个相同的喜好

等等

我希望这能解释我想做什么。我不认为mySQL查询会太难,但现在我对如何实现它感到困惑

提前谢谢

select
      UL2.userID,
      count(*) as LikeMatches
   from
      UserLikes UL1
         JOIN UserLikes UL2
            on UL1.LikeID = UL2.LikeID
           AND UL1.UserID != SingleUserBasisParameter
   where
      UL1.UserID = SingleUserBasisParameter
   group by
      UL2.UserID
   order by
      2 desc
order by中的2是表示计数的序数列*

如何:

select userid,count(*) as common_likes
from table
where likeid in (select likeid from table where userid = 45) and userid <> 45
group by userid
order by common_likes desc
SELECT COUNT(likes.likeID) as like_count FROM
LIKES as likes,
(SELECT UserID,likeID FROM likes WHERE UserID = $user_id) as user_likes
WHERE
user_likes.likeID = likes.likeID AND user_likes.userID != likes.userID
GROUP BY likes.UserID
ORDER BY like_count

我还没有测试过它,但我认为它至少应该给你一个正确的想法。第二次选择会找到主要用户的所有喜好,然后您可以使用这些喜好过滤掉其他喜好。

@ypercube,是的,但是仍然很高兴看到像您这样的非常有才华的人的答案:谢谢谢谢谢谢!!!只是想让你知道代码实际上是:和UL2.userID!=SingleUserBasisParameter,其中UL1.userID=SingleUserBasisParameter而不是UL1.userID!=SingleUserBasisParameter,其中UL1.UserID=SingleUserBasisParameter