Я получаю 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. Кроме того, мне не разрешено изменять столбец, чтобы упорядочить их в определенном порядке в самой таблице, поскольку это потребовало бы слишком большого количества изменений в существующей рабочей среде. Таким образом, изменение должно осуществляться только через функцию или запрос. Большое спасибо!