Извлечение данных с помощью столбца, значения которого отличаются от указанного значения поиска - PullRequest
0 голосов
/ 21 февраля 2020

Я получаю 2 ввода от пользователя, который является именем клиента и продуктами, которые он хочет купить, которые разделены запятыми. Есть база данных, в которой есть предыдущие записи о том, что эти люди покупают такие же или более продуктов. База данных RDBMS. Я использую SQL Server 2017. Все значения уникальны. База данных выглядит следующим образом:

RowNumber  ClientName        Products
   1           A             pen,pencil,newspaper,clothes,eggs,bread,ink,bulb,butter,cheese,noodles,wine
   2           A             pen,wine,newspaper,eggs,butter
   3           A             memory card,phone,eggs,ink,butter,cheese
   4           A             clothes,eggs,bread,ink,cheese,noodles,wine,pen,pencil,newspaper,butter,bulb
   5           A             newspaper,eggs,butter,pen,wine
   6           B             memory card,phone,eggs,cheese,noodles,wine,pen,pencil,newspaper,butter,bulb
   7           C             newspaper,eggs,butter,phone,pen,wine

Проблема в том, что строки 1 и 4 имеют одинаковые продукты от одного и того же клиента ie. А их порядок отличается. Поэтому, если Клиент вводит продукты в определенном порядке, извлекаются строки, точно соответствующие этому порядку.

For eg: 
1] If A wants to buy pen,pencil,newspaper,clothes,eggs,bread,ink,bulb,butter,cheese,noodles,wine
   Expected Output :row number 1 and 4
2] If A wants to buy pen,wine,newspaper,eggs,butter 
   Expected Output: row number 2 and 5 only, even though 1 and 4 contains those products too.

Поскольку моя программа написана на Python, я попробовал что-то вроде этого:

def export_data(ClientName, Products):
    Products_splitted=Products.split(',')
    permProducts = permutations(Products_splitted)
    dataset=pandas.DataFrame()
    for i in list(permProducts):
        sql="Select * from Prodtable where ClientName='%s' and Products='%s'"%(ClientName,i)
        data=pandas.read_sql(sql,conn)
        dataset=dataset.append(data)

    return dataset

Это хорошо работает для 3-4 продуктов. Но для 20 таких продуктов требуется больше времени, что понятно, поскольку проверяются все возможные комбинации. Но есть ли другое решение, которое занимает меньше времени? Количество строк в моей таблице превышает 30 тыс., А столбцов - более 40. Кроме того, мне не разрешено изменять столбец, чтобы упорядочить их в определенном порядке в самой таблице, поскольку это потребовало бы слишком большого количества изменений в существующей рабочей среде. Таким образом, изменение должно осуществляться только через функцию или запрос. Большое спасибо!

...