A question I get often is if I have two databases on two separate "datasources" that have similar data, how can I create a single query from it so I can display my records easier?

Well, the easiest thing that comes to mind is the following tutorial. The first thing you will need to do is create your two queries for the two databases.

<cfquery name="query1" datasource="FirstDSN">
    SELECT         FirstName,
                       LastName,
                       Email
    FROM            Members
    ORDER BY      FirstName
</cfquery>

<cfquery name="query2" datasource="SecondDSN">
    SELECT         FirstName,
                       LastName,
                       Email
    FROM            Members
    ORDER BY      FirstName
</cfquery>

Now that you have your TWO queries, the next step is to create a query from scratch and input these values, that way you can output them and work with your data as if it was a single query you performed.

The first thing you must do is to create the query, you achieve this as follows:

<!--- create the new query from scratch --->
<cfset myNewQuery = QueryNew("FirstName, LastName, Email")>

Next we will create the rows for the query.

<!--- make some rows in the query --->
<cfset newRow = QueryAddRow(MyNewQuery, #query1.RecordCount# + #query2.recordCount#)>

Notice the right variables "#query1.RecordCount# + #query2.recordCount#"  this is specifying that this new query we are creatin will have a total number of rows that both of the prior queries return. This will allow this to know the new recordcount.

The next step is to actually create a counter, I will show you why this is needed in a bit, for now lets define it to have a default value of "0".

<cfset counter = 0>

The next step is to go through the first TWO queries and populate the new query with data.

<!--- set the cells in the query --->
<cfoutput query="query1">
     <cfset counter = counter + 1>
     <cfset temp = QuerySetCell(myQuery,
"FirstName", query1.FirstName, counter)>
     <cfset temp = QuerySetCell(myQuery,
"LastName", query1.LastName, counter)>
     <cfset temp = QuerySetCell(myQuery,
"Email", query1.Email, counter)>
</cfoutput>

<!--- set the cells in the query --->
<cfoutput query="query2">
     <cfset counter = counter + 1>
     <cfset temp = QuerySetCell(myQuery,
"FirstName", query2.FIrstName, counter)>
     <cfset temp = QuerySetCell(myQuery,
"LastName", query2.LastName, counter)>
     <cfset temp = QuerySetCell(myQuery,
"Email", query2.email, counter)>
</cfoutput>

<!--- Then you can use this as a regular query --->
<cfoutput query="MyNewQuery">
      #currentrow#) #name# - #ddress# - #phone#<BR>
</cfoutput>

That's pretty much it, you now have a new query called "MyNewQuery" that you can work like any other query you've ever worked with...

Questions? Comments? Email me...

About This Tutorial
Author: Pablo Varando
Skill Level: Intermediate 
 
 
 
Platforms Tested: CF5,CFMX
Total Views: 57,964
Submission Date: March 10, 2003
Last Update Date: June 05, 2009
All Tutorials By This Autor: 47
Discuss This Tutorial
  • No need for a counter, this does it all: SELECT * FROM query1 UNION SELECT * FROM query2

  • when u used QuerySetCell function, you mis-spelled the query name.

  • cant you make a new QueryNew and do a 'select into' from the dbs into the QueryNew?

Advertisement

Sponsored By...
Powered By...