首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >匹配多个字段的MySQL查询

匹配多个字段的MySQL查询
EN

Stack Overflow用户
提问于 2011-11-26 21:59:23
回答 3查看 552关注 0票数 0

我有一个数据库,其中有一个表,其中有不同的喜欢,人们有。每个like都存储为不同的记录。我每条记录里唯一的信息是userID,likeID。

搜索将基于已登录的当前userID。所以我不是将每个人与每个人进行匹配,而是将每个人与1进行匹配

因此userID 45的表中可能有likeID 3、likeID 6和likeID 22 (例如)

我想要做的是让表按降序返回它们与之匹配的userID,基于它们与其他人匹配的总点赞数。

例如,(基于上面的用户45示例)它将查看userID 1,并查看它们有多少个likeID 3、likeID 6和likeID 22。然后它会转到userID 2,看看他们有多少likeID 3,likeID 6和likeID 22……它会为每个人做这件事。

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

匹配项:

你和UserID 12分享了3个相同的赞。

你和UserID 87分享了3个相同的赞。

你和UserID 22分享了2个相同的赞。

你和UserID 73分享了2个smae点赞。

你和UserID 71分享了1个相同的赞。

等等。

我希望这能解释我正在尝试做的事情。我认为mySQL查询不会太难,但现在我不知道该怎么做!

提前感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-26 22:07:07

代码语言:javascript
复制
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“是表示计数(*)的序数列

票数 1
EN

Stack Overflow用户

发布于 2011-11-26 22:09:50

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2011-11-26 22:12:06

这样如何:

代码语言:javascript
复制
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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8278893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档