2011-07-16 75 views
0

我的客户端有两个数据库,一个用于地点位置,另一个用于其他数据库(为什么我不知道)。我正在从ColdFusion工作,并从我可以告诉我需要做一个查询查询,因为CF不允许在同一个cfquery标签中的多个数据源。现在由于某种原因,latlng表中的主键是一个字符串,另一个表是double(再次说明为什么我不知道)。但在查询中,我现在正在测试我没有提取任何数据。我仍然试图了解QoQ是如何运作的,但我认为我有一个总体思路。谢谢!查询不提取数据类型不匹配的数据

<cfquery name="get_restrauntinfo" datasource="#listings#" dbtype="odbc"> 
SELECT * 
FROM listings_new 
WHERE pub_code = 'GridR' 
</cfquery> 

<cfquery name="get_latlng" datasource="#latlng#" dbtype="odbc"> 
SELECT member_id, mlat, mlong 
FROM maps 
</cfquery> 

<cfquery name="join_rest" dbtype="query"> 
SELECT * 
FROM get_latlng, get_restrauntInfo 
WHERE 'parseInt(get_restrauntInfo.cli_number)' = get_latlng.member_id 
</cfquery> 

回答

1

我会的,并已调派查理的答案,但修复现有的代码,你可以尝试用

CAST(get_restrauntInfo.cli_number AS INTEGER) 

您的WHERE子句中取代

'parseInt(get_restrauntInfo.cli_number)' 

+0

您是否认为QoQ会更有效率,然后我的答案如下或者是基本上做同样的事情? – rajh2504

+1

是的,因为在你的回答中,你正在为第一个查询循环的每次迭代进行另一次完整的数据库调用。通过QoQ,只有2个数据库调用。但是如果你坚持查理的建议,你将只有一个查询,这是理想的解决方案。 – CfSimplicity

+0

好的谢谢你的澄清! – rajh2504

2

虽然CF不允许多个数据源中传来CFQUERY标签,你应该仍然能够跨数据库加入。请参阅:http://www.google.com/search?q=join+across+databases

假设这可以为您工作,看起来比2个单独的查询和QoQ更简单。

+0

可悲的是我已经试过了,Coldfusion不喜欢我试图解决他们的标签设计。 – rajh2504

+1

只要它是查询标签之间有效的SQL,ColdFusion就不应该在意。你能详细说明什么是行不通的吗?错误信息是什么? – charliegriefer

0

所以我最终做的是使用CFLOOP,而我正在做更多的查询,然后我必须使用它!这里是代码:

<cfloop query="get_restrauntinfo"> 
    <cfquery name="get_latlng" datasource="#latlng#" dbtype="odbc"> 
     SELECT member_id, mlat, mlong 
     FROM maps 
     WHERE member_id = '#get_restrauntinfo.cli_number#' 
    </cfquery> 
    <cfset title = #get_restrauntinfo.publish_as#> 
    var content = addContent(#get_restrauntinfo#); 
    <cfoutput query="get_latlng"> 
     var #toScript(title, "title")#; 
     addMarker(#get_latlng.mlat#,#get_latlng.mlong#, title, content, map); 
    </cfoutput> 
</cfloop>