Переделал запрос, чтоб он выводил еще и имена пользователей, а так же совпавшиеся данные, а как вывести в этом же запросе все данные(data), которые не совпали as NOEQ
SELECT CONCAT(`t`.`user_id`, ' | ', `u1`.`name`) AS `user1`, CONCAT(`s`.`user_id`, ' | ', `u2`.`name`) AS `user2`, count(`s`.`user_id`) AS `num`,
GROUP_CONCAT(`t`.`data`) as EQ
FROM `user_data` AS `t`
JOIN `user_data` AS `s` ON (`t`.`data` = `s`.`data` AND `t`.`user_id` != `s`.`user_id`)
JOIN `users` AS `u1` ON(`u1`.`id` = `t`.`user_id`)
JOIN `users` AS `u2` ON(`u2`.`id` = `s`.`user_id`)
where `t`.`user_id` = 7
GROUP BY `user1`, `user2`
ORDER BY `user1`, `num` DESC, `user2`
Этот код все выводит нормально, осталось в этом же коде вывести и данные которые не совпали, отдельно можно было бы сделать так:
SELECT CONCAT(`t`.`user_id`, ' | ', `u1`.`name`) AS `user1`, CONCAT(`s`.`user_id`, ' | ', `u2`.`name`) AS `user2`, count(`s`.`user_id`) AS `num`,
GROUP_CONCAT(`s`.`data`) as NEEQ
FROM `user_data` AS `t`
JOIN `user_data` AS `s` ON (`t`.`data` != `s`.`data` AND `t`.`user_id` != `s`.`user_id`)
JOIN `users` AS `u1` ON(`u1`.`id` = `t`.`user_id`)
JOIN `users` AS `u2` ON(`u2`.`id` = `s`.`user_id`)
where `t`.`user_id` = 7
GROUP BY `user1`, `user2`
ORDER BY `user1`, `num` DESC, `user2`