У меня есть такая таблица:
Pos MD5 BlockHash
1 randommd51 randstr1
2 randommd51 randstr2
3 randommd51 randstr3
1 randommd52 randstr2
2 randommd52 randstr2
3 randommd52 randstr1
4 randommd52 randstr7
1 randommd53 randstr2
2 randommd53 randstr1
3 randommd53 randstr2
4 randommd53 randstr3
1 randommd54 randstr4
2 randommd54 randstr55
У меня есть еще один словарь в Python:
{ "randommd55": ["randomstr1", "randomstr2", "randomstr1"] }
Я хочу искать похожие файлы. Значение MD5 представляет полное значение MD5 файла. Он изменится, даже если в файле есть 1-битная разница.
Для каждого файла я беру случайные блоки размером 1 КБ и х sh их.
Итак, у меня есть словарь запросов, состоящий из нескольких блоков ha sh. Я хочу сравнить блок-запрос sh с файлами в таблице SQL.
Я хочу увидеть, сколько блоков sh совпадают между файлом запроса и файлами sql (MD5 не требуется для каждый файл).
Я хочу знать следующее:
1.) Всего найдено общих блоков
2.) Всего блоков в файле базы данных
3.) Положение общих блоков в базе данных & python dictonary
Например:
Файл, где MD5 - randommd51, имеет два общих блока. "randomstr1" и "randomstr2".
Таким образом, вывод будет таким: (конечно, не в формате engli sh).
Result 1:
1.) 2 common blocks found where MD5 is randommd52 in DB
2.) 3 total blocks are in the DB where MD5 is randommd52 in DB
3.) Position of common blocks in Query list is: "1,2" and position of common blocks in db are also "1,2"
Result2:
1.) 2 common blocks found where MD5 is randommd51 in DB
2.) 3 total blocks are in the DB where MD5 is randommd51 in DB
3.) Position of common blocks in Query list is: "1,2" and position of common blocks in db are also "1,3"
............
В настоящее время я использую запрос SQL, который возвращает только процентное совпадение между списком и SQL базой данных
select md5,
avg( (blockhash in ('randomstr1', 'randomstr2', 'randomstr3') ) as matching_ratio
from t
group by md5
Как я могу изменить его так, чтобы он возвращал вышеупомянутое вещи?