CFQuery «ГДЕ» из результатов другого запроса? - PullRequest
0 голосов
/ 26 октября 2011

Я объясню применение этого в реальной жизни, чтобы его было легче понять.

Я работаю над приложением электронной коммерции, которое имеет структуру категорий.Он начинается с верхнего уровня и постепенно перемещается вниз по подкатегориям.Например, Главная> Электроника> Телевизоры> Plasma

Я использую одну страницу для этого, показывая домашнюю страницу, если категория не определена, подкатегории, если они есть, и, наконец, продукты, если они есть.нет подкатегорий.

Это все работает нормально, однако, когда я перехожу ко 2-й части - отображение подкатегорий, страница немного пуста.Поэтому я хотел бы отобразить выбор продуктов, охватывающих все применимые подкатегории.

Вот где я борюсь - в большинстве случаев будет несколько подкатегорий.Однако я не уверен, как структурировать запрос '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 ]

4 голосов
/ 26 октября 2011

Предполагая, что ваша таблица продуктов содержит некоторый вид subcategoryID, вы можете использовать следующее для получения списка идентификаторов подкатегорий из запроса getsubcategories:

<cfset subCategoryIDs = valueList(getsubcategories.subCategoryID) >

Это даст вам список всех subCategoryID.Вы можете передать это в запрос getproducts следующим образом:

<cfquery name="getproducts">
SELECT *
FROM products
WHERE subCategoryID in (<cfqueryparam cfsqltype="cf_sql_integer" value="#subCategoryIDs#" list="true">)
ORDER BY RAND()
</cfquery>

Вы всегда должны cfqueryparam параметры запроса.

2 голосов
/ 26 октября 2011

Если я понимаю структуру вашей базы данных, этот запрос должен вернуть все продукты во всех подкатегориях.

<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.

...