У меня проблемы с детализацией некоторых данных, это структура таблицы
Таблица продуктов
uid_product (уникальный идентификатор)
txt_prod_name(название продукта)
Имя таблицы: tbl_products
Характеристики продукта
uid_feature (уникальный идентификатор)
txt_feature_name (имя функции)Имя таблицы: tbl_features
Назначенные функции продукта
uid_prodf (уникальный идентификатор)
uid_prodf_prodid (внешний ключ для uid_product)
uid_prodf_featid(внешний ключ для uid_features)
Имя таблицы: tbl_prod_features
Один продукт может иметь много функций, поэтому используется таблица tbl_prod_features.
Я создал следующий запрос для получения результатов;
<cfquery name="getFeatureProducts" datasource="#application.dsn#">
SELECT uid_product, txt_prod_name
FROM dbo.tbl_products
WHERE uid_product IN (SELECT (dbo.tbl_product_features.uid_prodf_prodid)
FROM dbo.tbl_product_features
WHERE uid_prodf_featid IN (<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#arguments.uid_features#" list="yes">))
ORDER BY dbo.tbl_products.txt_prod_name
</cfquery>
Это прекрасно подходит для получения всех продуктов, связанных с функциями, выбранными конечным пользователем.Однако мне нужно следующее:
Если пользователь выбирает;
Функция A = 5 отображаемых продуктов (3 из 5 из этих продуктов содержат функцию B)
Если пользователь затем выбирает;
Функция B = 3 Продукты
В настоящее время при запросе с использованием оператора in он по-прежнему будет получать 5 продуктов.
Моей первой мыслью было создание динамического оператора where с добавлением оператора AND, однако uid_prodf_featid = 5 AND uid_prodf_featid = 6 всегда будет давать 0 результатов.
Моя вторая идея заключалась в создании массиваиз идентификаторов продуктов из первой детализации, т.е. получить идентификаторы первых 5 продуктов, передать их в запрос и затем развернуть функции, это работает, и получаются правильные результаты.
Однако у пользователя есть возможность удалять функции (и в любом порядке), поэтому мне нужно каким-то образом отслеживать идентификаторы продуктов по мере их добавления и удаления.
IЯ уверен, что я слишком усложняю это, но любая помощь будет оценена.