2011-11-26 46 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查找主用戶的所有喜歡,然後可以用它來過濾其他喜歡。