Search code examples
coldfusioncoldfusion-9cfquery

how to store query data in variables in ColdFusion for use later?


I am trying to retrieve and store ID's for each item retrieved from my table, so I can use these ID's later. I tried nesting the queries, but this didn't, work. Here is my first query:

<CFQUERY datasource="MyDSN" name="MAIN2"> SELECT * from order_items where orderID= #orderID#</CFQUERY>

Now, if I output this query it displays, 1 and 117 which are the two ID's I need.

My next query is:

<CFQUERY datasource="MyDSN" name="MAIN3">select c.catalogueID,
c.product_name,
c.product_price,
c.description,
p.productID

from products p
join product_catalogue c on c.catalogueid = p.catalogueid
where p.productid = "#productID#"</CFQUERY>

But it is telling me that productID is not defined, it is obviously empty. I am just getting started using ColdFusion, so I am not sure the best way to store the values I need so I use them again. I also need to loop the second query to run for each ID 1 and 117, so twice.

Any suggestions on how to accomplish this would be greatly appreciated.

Thanks


Solution

  • My basic rule is that if I find myself using queries to create other queries or looping over a query to execute other queries; it is time to consider combining the queries.

    I'm not sure what field you are using in the MAIN2 query to feed the MAIN3 query. So, I put in "productID" in the query below. You may have to change it to fit your field name.

    <CFQUERY datasource="MyDSN" name="MAIN3">select c.catalogueID,
    c.product_name,
    c.product_price,
    c.description,
    p.productID
    
    from products p
    join product_catalogue c on c.catalogueid = p.catalogueid
    where p.productid IN (SELECT DISTINCT productID from order_items where orderID= <cfqueryparam value="#orderID#" cfsqltype="CF_SQL_INTEGER">)
    </CFQUERY>
    

    You could also change this query to utilize a "join" to connect [order_items] to the query.

    Lastly, you should use the <cfqueryparam> tag for the where clauses; this helps protect your query from sql injection attacks.