2011-11-26 39 views
0

我有一个数据库,其中有一个人有不同的喜欢的表。每个像存储为不同的记录。我在每条记录中唯一的信息是userID,像ID。与多个字段匹配的MySQL查询

搜索将基于所登录的用户ID的电流,所以我不匹配与每个人每个人,而是匹配EVERYONE VS 1

所以用户ID 45可能有likeID 3,likeID 6和likeID 22在表中(例如)

我想要做的是有表返回,降序排列的userIDs,他们匹配基于总喜欢他们与别人匹配。

例如,(基于上面的用户45示例),它将查看用户ID 1并查看它们具有多少像ID 3,如ID 6和相似ID 22。那么它会去userID 2,看看有多少likeID 3,像ID 6和likeID 22他们有.....它会为每个人做这个。

然后它会显示任何有那些3个likeIDs大于0的比赛结果:

匹配:

你和用户名12同样喜欢的每股3。

您和用户ID 87分享3个相同的喜欢。

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

你和UserID 73共享2个smae喜欢的东西。

您和用户ID 71共享1个相同的喜欢。

etc ...

我希望能解释我在做什么。我不认为MySQL的查询会太难,但现在我很困惑如何做到这一点!

感谢提前!

回答

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 

“2” 在由是表示COUNT(*)

+0

你给了我一分钟。 –

+0

@ypercube,是的,但仍然很高兴看到像你自己这样的其他非常有才华的头脑的答案:) – DRapp

+0

谢谢你,谢谢你谢谢!只是想让你知道代码实际上是:'AND UL2.userID!= SingleUserBasisParameter,其中UL1.userID = SingleUserBasisParameter'而不是'AND UL1.UserID!= SingleUserBasisParameter其中UL1.UserID = SingleUserBasisParameter' – user1066941

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 
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查找主用户的所有喜欢,然后可以用它来过滤其他喜欢。