MySQL Query匹配多个字段

时间:2011-11-26 13:59:23

标签: mysql

我有一个数据库,其中包含一个人们拥有不同LIKES的表。每个像是存储为不同的记录。我在每条记录中唯一的信息是userID,比如ID。

搜索将基于登录的当前用户ID。因此,我不是每个人都与每个人匹配,而是匹配每个人与1

因此,userID 45可能具有类似ID 3,例如表6中的ID 6和likeID 22(例如)

我想要做的是让表返回,按照与其他人匹配的总喜欢的降序匹配的userID。

例如,(基于上面的用户45示例),它将查看userID 1并查看他们拥有多少likeID 3,如ID 6和likeID 22。那么它会转到用户ID 2,看看他们有多少喜欢ID 3,比如ID 6和喜欢ID 22 ......它会为每个人做到这一点。

然后它会显示任何那些对3个likeIDs匹配超过0的​​结果:

匹配

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

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

您和UserID 22共享2个相同的喜欢。

你和UserID 73分享了2个喜欢的人。

您和UserID 71共享1个相同的喜欢。

等...

我希望这可以解释我正在尝试做什么。我不认为mySQL查询会太难,但现在我对如何做到这一点感到困惑!

感谢提前!

3 个答案:

答案 0 :(得分:1)

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”是表示COUNT(*)

的序数列

答案 1 :(得分:0)

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

答案 2 :(得分:0)

怎么样:

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

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