Как найти количество общих строк и позиции в списке MySQL DB & Python - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть такая таблица:

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

Как я могу изменить его так, чтобы он возвращал вышеупомянутое вещи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...