【问题标题】:MYSQL - Select users with most duplicate records with specific userMYSQL - 选择与特定用户重复记录最多的用户
【发布时间】:2014-01-21 18:32:53
【问题描述】:

我的表很简单:

user_id 、 questionid 、 answerid(其余不重要)

id  | user_id  | questionid |  answerid
====+==========+============+=============
  1 |     1    |       1    |  11
  2 |     1    |       2    |  14
  3 |     2    |       1    |  11
  4 |     2    |       2    |  14
  5 |     3    |       1    |  11
  6 |     3    |       2    |  16

我需要一个与当前(指定)用户 ID 具有相同答案 ID 的用户 ID 列表,从大多数相同的答案向下排序。

基本上...与当前用户对问题的回答相同的用户列表...具有相同答案的数量。

列表应该看起来像 - 对于 userid(1) :

  • userid(2) - 2
  • userid(3) - 1

所以用户 ID 2 与用户 ID 1 有 2 个相同的答案 并且用户 ID 3 与用户 ID 1 有 1 个相同的答案

非常感谢...

【问题讨论】:

    标签: mysql count duplicates distinct


    【解决方案1】:

    这基本上是所有用户和指定用户之间的left outer join。如果join成功,那么答案是一样的。

    select qa.user_id, count(qau.id) as SameAnswers
    from qa left outer join
         qa qau
         on qau.user_id = XXX and
            qau.questionid = qa.questionid and
            qau.answerid = qa.answerid
    group by qa.user_id
    order by SameAnswers desc;
    

    请注意,除非所有用户都回答了相同的问题,否则这种对相同答案数量的衡量并不是一个很好的相似性衡量标准。

    【讨论】:

    • @HelFrozeOver 。 . .这回答了你的问题。我的评论只是判断该措施的有用性。
    • 您的方法是否比最终对我更有效的解决方案更好:选择 A.user_id, count(A.answerid) AS match_cnt from #__test as A join (select user_id, answerid from @987654324 @ where user_id = "'.mysql_real_escape_string($myid).'") as B on (A.answerid = B.answerid AND A.user_id B.user_id) group by A.user_id order by match_cnt DESC
    • @HelFrozeOver 。 . .我认为这两种方法非常相似。您的使用子查询,这在 MySQL 中会产生具体化结果的开销。
    猜你喜欢
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-18
    • 2013-02-20
    • 2013-12-17
    • 1970-01-01
    相关资源
    最近更新 更多