2011-01-11 5 views
-2

を定義することはできません正しく動作します。このコードはbrand_idを定義する必要がありますが、代わりに1を表示します。 システムはWorkcubeです。は、ここに私のColdFusionコードがあるが、IDのColdFusionの

例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から取得する必要があり、この時間ここ

は、静的な製品のID、そのダイナミックな価格から取得するための私の例です。あなたはこのようなタグでステートメントをラップする必要が

<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と同じである可能性が高いため、ブランド名などを取得する場合にのみ意味があります。 –

+0

-1コード例の書式設定 – orangepips

+0

3回読むにもかかわらず、あなたの質問はまだ不明です。 SQLで2つのテーブルを 'join 'する方法を尋ねていますか?もしそうなら、あなたのテーブル構造、そして好ましくはサンプルデータのスニペットを投稿してください。 – Leigh

答えて

4

Andreasが彼のコードで示しているように、あなたのクエリは書かれたとおりに動作しません。ステートメントWHERE PRODUCT_CATID = PRODUCT_CATIDは実際には値を渡しません。実際にはテーブル値内で自己参照のみになります。この場合、テーブル内のすべてが返されます。

あなたは代わりに持っている必要があります。

#1 PRODUCT_CATID#は変数を表し
WHERE PRODUCT_CATID = #PRODUCT_CATID# 

を。さらに、cfqueryparamをAndreasのショーとして使用してください(これにより、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

WHERE PRODUCT_CATID =#PRODUCT_CATID#)そうですが、このようにしなければなりませんが、正しく動作する方法を見つけることができず、さらにデータベースへのアクセス権もありません。その方がはるかに簡単でした)) –

0

: このスクリプトは、例1と同じように動作します。

<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

0

それはあなたの質問が本当にあるものについて非常に明確ではないですが、私は推測してみましょう:#product_catid#は、あなたのコード内で以前に定義またはフォームまたはURLスコープを介して受信された変数を参照し

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

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

はすべてproduct_catidのクエリによって返されるの一覧が表示されます。

+0

と書いても問題ありませんでしたが、それはできませんでした)。 –

+0

@venom:何を説明しますか人々に推測させる代わりに実際にやろうとしています。 –

+0

このようなタグやsmthを定義しようとすると、BRAND_IDやPRODUCT_CATもすべての製品で使用できます。既に定義されているProductのIDもあり、そのブランドを定義できます。前の定義の例を追加しますしかし、価格は –

0

あなたがここで何をしているかはあまり明確ではありませんが、クエリには少なくとも2つの問題があります。まず、あなたのWHERE句

WHERE PRODUCT_CATID = PRODUCT_CATID 

これは、完全なレコードセットを返します

WHERE 1=1 

を言うようなものです。あなたは、クエリの出力を見るためにあなたのコードの下に

<cfdump var="#GET_BRAND#">

を追加することで、これを見ることができます。私はこれがテーブルのすべてのレコードを表示すると思います。句が

WHERE PRODUCT_CATID = 3 

ようなものか、あなたはそれを動的にするために一致しようとしている変数に巻き付け#...#を持っているあなたのWHEREあなたが必要とするだけで一つのレコードに一致するように

第2に、クエリ結果に複数のレコードがあり、出力をループする必要がある最初のレコード以上を表示することがあります。一つの方法は、

<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> 
関連する問題