Нужно вывести в таком порядке (порядок такой же как и у меня) -
для пользователя - выводим данные пользователя(-ей)
1 - 4 (т.к. все совпадают), потом 2 и 3 (т.к. совпадает одно поле)
2 - 1, 3, 4, 5 (одно поле совпадает)
3 - выводим всех кроме 5-го пользователя
4 - 1, 2, 3
5 - 2
Надеюсь, правильно объяснил, словами если объяснить - нужно найти для пользователя пересечения данных с остальными пользователями и отсортировать по убыванию в зависимости от того, сколько данных совпало
Для правильного вопроса надо знать половину ответа
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`