Сложный MySQL Query - Найти дубликаты PER user_id? - PullRequest
0 голосов
/ 23 октября 2011

У меня есть база данных Facebook Likes от нескольких человек.Во многих "user_id" есть повторяющиеся поля "like_id".Я хочу запрос, который определит количество людей, которым "like_id" A имеет общее с человеком B.

Этот запрос отлично подходит для сравнения лайков, когда в базе данных только 2 пользователя "user_id", но так каккак только я добавляю третью, это все портит.В общем, я хочу узнать, у кого больше всего "лайков" общего с человеком А.

  SELECT *, 
         COUNT(*)
    FROM likes
GROUP BY like_id
  HAVING COUNT(*) > 1

У кого-нибудь есть запрос, который может сработать?

Ответы [ 2 ]

1 голос
/ 23 октября 2011

Этот SQL должен работать.Вам просто нужно ввести user_id пользователя A, и он должен сравниваться со всеми другими пользователями и показывать наиболее подходящий.Вы можете изменить его, чтобы он отображал топ-5 или делать все, что вам нужно.

По сути, он выполняет самостоятельное соединение на столе, но при этом обязательно проверяет, когда оно выполняет соединение., это другой user_id, но "лайк" то же самое.Затем он делает группу по каждому из идентификаторов user_id и суммирует одинаковое количество лайков для этого user_id.

SELECT  all_other_likes.user_id, count(all_other_likes.like_id) AS num_similar_likes
FROM    likes original_user_likes
JOIN    likes all_other_likes
ON      all_other_likes.user_id != original_user_likes.user_id
AND     original_user_likes.like_id = all_other_likes.like_id
WHERE   original_user_likes = USER_ID_YOU_WANT_TO_COMPARE
GROUP BY all_other_likes.user_id
ORDER BY count(all_other_likes.like_id) DESC
LIMIT 1;

Не уверен, какую базу данных вы используете.Возможно, вам потребуется выполнить команду SELECT TOP 1, если это MS-SQL, но это допустимый синтаксис PostgreSQL и MySQL.

0 голосов
/ 23 октября 2011

Я думаю, что это сделает это:

SELECT
  likes_a.user_id,
  likes_b.user_id 
FROM
  likes as likes_a JOIN likes as likes_b
ON
  likes_a.like_id = likes_b.like_id 
WHERE
  likes_a.user_id <> likes_b.user_id

А затем постобработать результаты, чтобы подсчитать, у кого больше всего общего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...