Задать вопрос
@IceJOKER
Web/Android developer

Как вывести все поля с максимальным совпадением значений полей?

Есть таблица

id user_id data
1 - 1 - Заяц
2 - 1 - Волк
3 - 1 - Медведь

4 - 2 - Заяц
5 - 2 - Лиса

6 - 3 - Заяц

7 - 4 - Медведь
8 - 4 - Волк
9 - 4 - Заяц
10 - 4 - Орангутанг

11 - 5 - Троль
12 - 5 - Лиса

Нужно вывести в таком порядке (порядок такой же как и у меня) -
для пользователя - выводим данные пользователя(-ей)
1 - 4 (т.к. все совпадают), потом 2 и 3 (т.к. совпадает одно поле)
2 - 1, 3, 4, 5 (одно поле совпадает)
3 - выводим всех кроме 5-го пользователя
4 - 1, 2, 3
5 - 2

Надеюсь, правильно объяснил, словами если объяснить - нужно найти для пользователя пересечения данных с остальными пользователями и отсортировать по убыванию в зависимости от того, сколько данных совпало
  • Вопрос задан
  • 3175 просмотров
Подписаться 2 Оценить Комментировать
Решение пользователя Rsa97 К ответам на вопрос (3)
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
SELECT `t`.`user_id` AS `user1`, `s`.`user_id` AS `user2`, count(`s`.`user_id`) AS `num`
  FROM `table` AS `t`
    JOIN `table` AS `s` ON (`t`.`data` = `s`.`data` AND `t`.`user_id` != `s`.`user_id`)
  GROUP BY `user1`, `user2`
  ORDER BY `user1`, `num` DESC, `user2`
Ответ написан
Комментировать