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.

Другие вопросы по тегам