2014-01-21 4 views
0

Моей таблицы очень просты:MYSQL - Выбор пользователей с большинством дублирующих записей с конкретным пользователем

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 

Мне нужна список идентификаторов пользователей которые имеют те же answerids, что и текущий (указанный) userid, отсортированные по большинству ответов.

В основном ... список пользователей, которые ответили так же, как и текущий пользователь, на вопросы ... с рядом одинаковых ответов.

список должен выглядеть - для идентификатора пользователя (1):

  • Идентификатор_пользователя (2) - 2
  • Идентификатор_пользователя (3) - 1

так Userid 2 имеет 2 одинаковые ответы, Идентификатор_пользователя 1 и Userid 3 имеет 1 такой же ответ, как идентификатор пользователя 1

Благодаря много ...

ответ

0

Это в основном left outer 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; 

Обратите внимание, что эта мера количества одинаковых ответов не очень хорошая мера подобия, если все пользователи не ответили на те же вопросы.

+0

Спасибо, но на самом деле, конечно, они не будут ВСЕ отвечать на одни и те же вопросы ... –

+0

@HelFrozeOver. , , Это отвечает на ваш вопрос. Мой комментарий - это просто мнение о том, насколько полезной мера. –

+0

Является ли ваш метод лучше, чем решение, которое в конечном итоге работает для меня лучше: выберите A.user_id, count (A.answerid) AS match_cnt из '#__ test' as A join (выберите user_id, answerid из' #__ test', где user_id = "'.mysql_real_escape_string ($ myid).'") как B on (A.answerid = B.answerid AND A.user_id <> B.user_id) группой по порядку A.user_id по match_cnt DESC –

Смежные вопросы