Показать сообщение отдельно
Старый 26.09.2017, 22:56   #1
g00dw1n
Эксперт
Аватар для g00dw1n
OFFLINE
Регистрация: 30.01.2016
Возраст: 32
Сообщений: 2,265
Благодарностей:
355 всего
Мнения: + 1104
Репутация: 1066
Отправить сообщение для g00dw1n с помощью Skype™

[SQL] Анализ почты


Собственно этот не хитрый скрипт необходимый для того чтобы найти имена персонажей которые так или иначе относятся к указанному персу. Поиск без учёта предметов и т.п., просто факт контакта по почте.
Сильно упрощает жизнь при расследовании дюпов/взломов.

Пример:
Перс A передал B, а тот в свою очередь C и D. Вас интересует кто относится к персу A и на кого стоит обратить внимание.
Скрипт даст пути:
/A/B/C/
/A/B/D/

Сам sql запрос:
Код:
 DECLARE @StartName nvarchar(max) =  'You name'
 
 ; With Links ([serial], [sendname], [recvname], [level], [path], [used_serial]) AS (
	select [serial]
		,[sendname]
		,[recvname]
		,1 as [level]
		,'/' + convert(nvarchar(max), rtrim([sendname])) + '/' 
		+ convert(nvarchar(max), rtrim([recvname])) + '/' 
		as [path]
		,'/' + convert(nvarchar(max), [serial]) + '/' as [used_serial]
	from [tbl_PostStorage]
	where [sendname] = @StartName and [recvname] <> [sendname]

	union all

	select [tbl_PostStorage].[serial]
		,[tbl_PostStorage].[sendname]
		,CASE WHEN ROW_NUMBER() OVER (PARTITION BY [Links].[serial] ORDER BY [Links].[serial]) >= 1 
			THEN NULL 
         ELSE [tbl_PostStorage].[recvname] END AS [recvname]
		,[Links].[level] + 1 as [level]
		,[Links].[path] + rtrim([tbl_PostStorage].[recvname]) + '/'
		,[Links].[used_serial] + convert(nvarchar(max), [tbl_PostStorage].[serial]) + '/'
	from  [Links]
	INNER JOIN [tbl_PostStorage]
		on [tbl_PostStorage].[sendname] = [Links].[recvname]
		and [Links].[path] not like '%/' + rtrim([tbl_PostStorage].[recvname]) + '/%'
		and [Links].[used_serial] not like '%/' + convert(nvarchar(max), [tbl_PostStorage].[serial]) + '/%'
	where [tbl_PostStorage].[sendname] <> [tbl_PostStorage].[recvname]
 )
 Select distinct [path] from Links
 order by [path]
Если есть замечания - велком. Тестилось на схеме таблице от GU

Злобный программист
 
Ответить с цитированием
Сказали спасибо:
Император (03.10.2017), rulezluksor (01.10.2017), ЕНЫ (29.09.2017), (S)TudeNT (28.09.2017), Dmitriy Alexand (27.09.2017), KarabasS (27.09.2017)