为什么Coldfusion/MySQL中的左连接会导致无休止的循环?
我正在ColdFusion8MySQL 5.0.88中运行一个搜索查询 查询在Coldfusion中构造一个左连接,如下所示:为什么Coldfusion/MySQL中的左连接会导致无休止的循环?,mysql,coldfusion,left-join,infinite-loop,Mysql,Coldfusion,Left Join,Infinite Loop,我正在ColdFusion8MySQL 5.0.88中运行一个搜索查询 查询在Coldfusion中构造一个左连接,如下所示: <cfquery datasource="db" name="q"> SELECT ... </cfscript> 输入到实际查询synatx中: SELECT art, count(*) as number FROM article a <cfqueryparam value="#variables.pl#" c
<cfquery datasource="db" name="q">
SELECT ...
</cfscript>
输入到实际查询synatx中:
SELECT art, count(*) as number
FROM article a
<cfqueryparam value="#variables.pl#" cfsqltype="cf_sql_longvarchar">
WHERE ...
如果我试图触发此操作,服务器就会挂断,我需要重新启动浏览器选项卡以结束会话。我已从选择中删除所有其他搜索条件。错误是由提供my text contstruct的cfqueryparam引起的
但是我不知道问题出在哪里,因为我从来没有犯过错误。浏览器就这样死掉了,所以我想我是在创造某种无休止的循环
问题:
有人能从我的代码中看出我做错了什么吗
谢谢
编辑:
我设法从服务器挂起变成了提交错误。但是,由于脚本是由Ajax调用触发的,我无法远程访问CFadmin,因此我需要猜测问题可能是什么。您在这里所做的不是cfqueryparam的目的,我建议您阅读cfqueryparam的正确用法- 将您的代码重构为如下所示应该可以按照您的预期工作。我替换了标签的脚本,只是根据我的喜好,如果您喜欢,可以随意使用脚本
<cfquery ...>
SELECT art, count(*) as number
FROM article a
LEFT JOIN pricelists p ON
<cfloop query="q" >
<cfif q.listitem IS ''>
(a.iln = p.iln
AND p.pl= "-Standard-"
AND p.ean = a.ean
AND p.iln = <cfqueryparam value='#q.iln_verkaeufer#' />
)
<cfelse>
(a.iln = p.iln
AND p.pl= <cfqueryparam value="#q.pl#"/>
AND p.ean = a.ean
AND p.iln = <cfqueryparam value="#q.userID#" />
)
</cfif>
<cfif NOT q.isLast()>OR</cfif>
</cfloop>
WHERE ...
</cfquery>
您在这里所做的不是cfqueryparam的目的,我建议您阅读cfqueryparam的正确用法- 将您的代码重构为如下所示应该可以按照您的预期工作。我替换了标签的脚本,只是根据我的喜好,如果您喜欢,可以随意使用脚本
<cfquery ...>
SELECT art, count(*) as number
FROM article a
LEFT JOIN pricelists p ON
<cfloop query="q" >
<cfif q.listitem IS ''>
(a.iln = p.iln
AND p.pl= "-Standard-"
AND p.ean = a.ean
AND p.iln = <cfqueryparam value='#q.iln_verkaeufer#' />
)
<cfelse>
(a.iln = p.iln
AND p.pl= <cfqueryparam value="#q.pl#"/>
AND p.ean = a.ean
AND p.iln = <cfqueryparam value="#q.userID#" />
)
</cfif>
<cfif NOT q.isLast()>OR</cfif>
</cfloop>
WHERE ...
</cfquery>
哦这个好多了。我继承了最初的剧本,并试图从中有所收获。用你的例子,我很喜欢。但我无法在查询或任何查询结果之后从中获取标志。即使查询后的cfdump也不会触发。需要再调查一下哦。这个好多了。我继承了最初的剧本,并试图从中有所收获。用你的例子,我很喜欢。但我无法在查询或任何查询结果之后从中获取标志。即使查询后的cfdump也不会触发。需要进一步调查一下
<cfquery ...>
SELECT art, count(*) as number
FROM article a
LEFT JOIN pricelists p ON
<cfloop query="q" >
<cfif q.listitem IS ''>
(a.iln = p.iln
AND p.pl= "-Standard-"
AND p.ean = a.ean
AND p.iln = <cfqueryparam value='#q.iln_verkaeufer#' />
)
<cfelse>
(a.iln = p.iln
AND p.pl= <cfqueryparam value="#q.pl#"/>
AND p.ean = a.ean
AND p.iln = <cfqueryparam value="#q.userID#" />
)
</cfif>
<cfif NOT q.isLast()>OR</cfif>
</cfloop>
WHERE ...
</cfquery>