2011-01-11 49 views
-2

這裏是我的ColdFusion代碼:不能定義ID的ColdFusion

例1:

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

這是我從靜態產品的ID,它的動態價格越來越例如:

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

但這次我需要從動態的產品的ID其活力的品牌ID來獲得。 這個腳本的工作方式相同的實例1:

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

你(再次)不要在您最後一次查詢傳遞值。和以前一樣的問題。它應該是這樣的:WHERE BRAND_ID =#get_brand.product_catid#(不要忘記使用cfqueryparam)。如果你想檢索品牌名稱或者其他東西,這是唯一的意義,因爲brand_id很可能等於product_catid。 – 2011-01-11 15:24:10

+0

-1代碼示例格式化 – orangepips 2011-01-12 00:53:33

+0

儘管閱讀了三次,但您的問題仍不清楚。你在問怎麼在sql中連接兩個表?如果是這樣,*請*張貼您的表格結構,最好是樣本數據片段。 (看到一些具體的數據可能有助於揭露你真正的問題..) – Leigh 2011-01-12 12:06:27

回答

4

正如Andreas在他的代碼中顯示的那樣,您的查詢不會像寫入的那樣工作。 WHERE PRODUCT_CATID = PRODUCT_CATID語句實際上並不傳遞一個值 - 它實際上只是表值中的自引用。在這種情況下,它會返回表中的所有內容。

而應該有:

WHERE PRODUCT_CATID = #PRODUCT_CATID# 

凡#PRODUCT_CATID#代表一個變量。更好的是,像Andreas所示的那樣使用cfqueryparam(這可以防止SQL注入並提高查詢性能)。但是,我甚至不確定這是你的意圖,因爲如果你有產品ID,你爲什麼需要從數據庫中獲得它?相反,我假設你可能想要從某個特定類別的產品中獲得品牌。不知道你的表結構,很難寫查詢你,但它可能看起來像:

<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

你需要用的聲明中這樣的標籤。

<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> 
+0

NOPE不工作,即使我寫 2011-01-11 14:18:18

0

這不是很清楚你的問題其實是關於,但讓我猜:

<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

這裏不太清楚你在這裏,但在查詢中至少有兩個問題。首先你的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>