Условие
Дана таблица с колонками:
| key | id | phone | |
|---|---|---|---|
| 1 | 12345 | 89997776655 | test@mail.ru |
| 2 | 54321 | 87778885566 | two@mail.ru |
| 3 | 98765 | 87776664577 | three@mail |
| 4 | 66678 | 87778885566 | four@mail.ru |
| 5 | 34567 | 84547895566 | four@mail.ru |
| 6 | 34567 | 89087545678 | five@mail.ru |
По заданному значению поля (id, phone или mail) нужно вернуть все связанные записи — то есть транзитивно склеенный «островок» записей, которые так или иначе делят id/phone/mail друг с другом.
Например, для phone = 87778885566:
- запись 2 матчится напрямую (
phone = 87778885566); - запись 4 матчится тем же телефоном;
- запись 5 разделяет
mail = four@mail.ruс записью 4 → подтягивается; - запись 6 разделяет
id = 34567с записью 5 → тоже подтягивается.
Итог: записи 2, 4, 5, 6.
Задача — типичная дедупликация / антифрод: нужно построить «связные компоненты» по графу записей.