CFQuery "ГДЕ" из результатов другого запроса?
Я объясню применение этого в реальной жизни, чтобы его было легче понять.
Я работаю над приложением электронной коммерции, которое имеет структуру категорий. Он начинается на верхнем уровне и постепенно перемещается вниз по подкатегориям. Например Главная> Электроника> Телевизоры> Плазма
Для этого я использую одну страницу: домашнюю страницу, если категория не определена, подкатегории, если они есть, и, наконец, продукты, если подкатегорий нет.
Это все работает нормально, однако, когда я перехожу ко второй части - отображению подкатегорий, страница становится немного пустой. Поэтому я хотел бы отобразить выбор продуктов, охватывающих все применимые подкатегории.
Вот где я борюсь - в большинстве случаев будет несколько подкатегорий. Однако я не уверен, как структурировать запрос 'where', используя результаты предыдущего запроса (фрагменты кода ниже для справки).
Я не верю, что QofQ стоило бы изучить, и я предпринял тщетную попытку что-то сделать с подстрокой, но безуспешно.
Любые указатели высоко ценится!
<cfquery name="getcategories">
SELECT p.ID AS CategoryID, p.Cat_Name as CategoryName, p.Cat_Shortname, c.ID AS SubCategoryID, c.Cat_Name as SubCategoryName, c.Cat_Shortname AS SubCatShortname
FROM product_categories p LEFT JOIN product_categories c ON p.ID = c.SubcategoryOf
WHERE p.SubcategoryOf = 0
</cfquery>
<cfif IsDefined('url.cat')>
<!--- Look for additional subcategories --->
<cfquery name="getsubcategories">
SELECT *
FROM product_categories
WHERE Subcategoryof='#url.cat#'
</cfquery>
<cfquery name="getproducts">
SELECT *
FROM products
WHERE categoryid='#url.cat#'
ORDER BY RAND()
</cfquery>
</cfif>
2 ответа
Предполагая, что ваша таблица продуктов содержит некоторый вид subcategoryID, вы можете использовать следующее, чтобы получить список идентификаторов подкатегорий из запроса getsubcategories:
<cfset subCategoryIDs = valueList(getsubcategories.subCategoryID) >
Это даст вам список всех subCategory IDs. Вы можете передать это в запрос getproducts следующим образом:
<cfquery name="getproducts">
SELECT *
FROM products
WHERE subCategoryID in (<cfqueryparam cfsqltype="cf_sql_integer" value="#subCategoryIDs#" list="true">)
ORDER BY RAND()
</cfquery>
Вы должны всегда cfqueryparam
параметры вашего запроса.
Если я понимаю структуру вашей базы данных, этот запрос должен вернуть все продукты во всех подкатегориях.
<cfquery name="getallproducts">
SELECT *
FROM products p LEFT JOIN product_categories pc ON p.categoryID = pc.ID
WHERE pc.Subcategoryof= <cfqueryparam cfsqltype="cf_sql_integer" value="#url.cat#">
</cfquery>
примечание: вы действительно хотите использовать здесь cfqueryparam.