не могу определить идентификатор ColdFusion - PullRequest
0 голосов
/ 11 января 2011

вот мой код ColdFusion:

Example1:

<cfquery name="GET_BRAND" datasource="#dsn1#">
SELECT PRODUCT_CATID 
FROM PRODUCT_CAT 
WHERE PRODUCT_CATID = PRODUCT_CATID
</cfquery>
#get_brand.product_catid#

Но он показывает все время номер 1, я просто не могу понять, почему и как мне заставить его работать должным образом, этот код должен был определить brand_id, а вместо этого показать 1 Система Workcube.

Вот мой пример получения статического идентификатора продукта, его динамической цены:

Пример 2:

<cfset product_id = 630>
            <cfquery name="price_standart" datasource="#dsn3#">
            SELECT
                PRICE_STANDART.PRICE PRICE
            FROM
                PRICE_STANDART
            WHERE
                PRICE_STANDART.PRODUCT_ID = 
                <cfqueryparam value="#product_id#" cfsqltype="cf_sql_integer">
            </cfquery>

Но на этот раз мне нужно получить из динамического идентификатора продукта его динамический идентификатор бренда. Этот скрипт работает так же, как в примере 1:

<cfquery name="GET_BRAND" datasource="#dsn1#">
                        SELECT BRAND_ID 
                        FROM PRODUCT_BRANDS
                        WHERE BRAND_ID = BRAND_ID
                        </cfquery>
                        #get_brand.BRAND_ID#

Ответы [ 4 ]

4 голосов
/ 11 января 2011

Как показывает Андреас в своем коде, ваш запрос не будет работать так, как написано. Оператор WHERE PRODUCT_CATID = PRODUCT_CATID на самом деле не передает значение - он фактически будет самоссылочным в пределах значений таблицы. В этом случае он вернул бы все в таблице.

Вместо этого вы должны иметь:

WHERE PRODUCT_CATID = #PRODUCT_CATID#

Где # PRODUCT_CATID # представляет переменную. Еще лучше, используйте cfqueryparam, как показывает Андреас (это предотвращает внедрение SQL и повышает производительность запросов). Тем не менее, я даже не уверен, что это то, что вы намерены, поскольку, если у вас есть идентификатор продукта, почему вам нужно получить его из базы данных? Вместо этого я предполагаю, что вы, вероятно, хотите получить бренды из продукта в определенной категории. Не зная структуры вашей таблицы, сложно написать этот запрос для вас, но он может выглядеть примерно так:

<cfquery name="GET_BRAND" datasource="#dsn1#">
SELECT PRODUCT.BRAND_ID
FROM PRODUCT
   INNER JOIN PRODUCT_CAT
     ON PRODUCT.PRODUCT_CATID = PRODUCT_CAT.PRODUCT_CATID
WHERE PRODUCT_CATID = <cfqueryparam cfsqltype="cf_sql_integer" value="#product_catid#">
</cfquery>

Наконец, как показывают оба комментария, вам нужно будет просмотреть результаты, чтобы увидеть все возвращенные записи.

0 голосов
/ 12 января 2011

Не очень понятно, что вы здесь ищете, но в запросах есть как минимум 2 проблемы. Сначала ваше предложение WHERE

WHERE PRODUCT_CATID = PRODUCT_CATID

все равно что сказать

WHERE 1=1

Это вернет полный набор записей. Вы можете увидеть это, добавив

<cfdump var="#GET_BRAND#">

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

Чтобы соответствовать только одной записи, вам нужно, чтобы выражение WHERE было похоже на

WHERE PRODUCT_CATID = 3

или оберните # ... # вокруг переменной, которую вы пытаетесь сопоставить, чтобы сделать ее динамичной.

Во-вторых, к результату запроса может относиться более одной записи, и чтобы увидеть любую, кроме первой записи, нужно зациклить вывод. Одним из способов является использование

<cfoutput query="GET_BRAND">
#BRAND_ID# <br>
</cfoutput>

Мое предположение о том, что вы ищете,

<cfset ID_TO_MATCH=3>


<cfquery name="GET_BRAND" datasource="#dsn1#">
SELECT BRAND_ID 
FROM PRODUCT_CAT 
WHERE PRODUCT_CATID = #ID_TO_MATCH#
</cfquery>

<cfoutput query="GET_BRAND">
#BRAND_ID# <br>
</cfoutput>
0 голосов
/ 11 января 2011

Не совсем понятно, о чем на самом деле ваш вопрос, но позвольте мне догадаться:

<cfquery name="GET_BRAND" datasource="#dsn1#">
SELECT PRODUCT_CATID 
FROM PRODUCT_CAT 
WHERE PRODUCT_CATID = <cfqueryparam cfsqltype="cf_sql_integer" value="#product_catid#">
</cfquery>

где #product_catid# относится к переменной, которую вы определили ранее в своем коде или получили через форму или область видимости URL.

<cfloop query="GET_BRAND">
#get_brand.product_catid#<br />
</cfloop>

покажет список всех product_catid, возвращенных запросом.

0 голосов
/ 11 января 2011

Вы должны обернуть оператор в теги, подобные этой.

<cfquery name="GET_BRAND" datasource="#dsn1#">
     SELECT PRODUCT_CATID FROM PRODUCT_CAT WHERE PRODUCT_CATID = PRODUCT_CATID
</cfquery>
   <cfoutput query =GET_Brand">
       #get_brand.product_catid#
  </cfoutput>
...