首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >coldfusion QoQ和条件语句

coldfusion QoQ和条件语句
EN

Stack Overflow用户
提问于 2012-11-29 07:58:11
回答 2查看 523关注 0票数 1

不久前我问了一个问题( Query with grouped results by column (SQL Server) )。我得到了一些可以在SQL server上工作的答案,但我不能让它们作为QoQ的一部分工作。原来CF有一些小限制,比如不能使用INNER JOIN

我试图实现的是获取一个查询,该查询可以为同一项目提供多个项目名称,但当我调用QoQ时,我希望它过滤(保留)与语言ID匹配的项目(如果有),如果缺少,则缺省为另一个。

我对几个查询这样做,所以我尝试将代码放在一个函数中,在函数中插入查询,将uniqueColumn命名为languageId。

因为我不能使用内部连接,并且我在使用一些条件语句时遇到了问题,所以我在考虑创建第二个只有匹配languageId的表,然后添加另一个表中缺少的条目。

有没有办法在一个查询中做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-29 08:35:33

你可以使用Q的Q进行内部连接,但不能使用关键字"join“。您必须在where子句中连接查询。如下所示:

代码语言:javascript
复制
select whatever
from query1, query2
where query1.field1 = query2.field2
etc

Q个联合查询的执行方式与数据库查询的执行方式相同。要做这样的事情,“我希望它过滤(保留)与语言ID匹配的项,如果有,则缺省为另一个。”,代码类似于

代码语言:javascript
复制
select query2.actual_value
from query1, query2
where query1.field1 = query2.field2
etc
union
select default_value
from query1
where field1 not in( ValueList(query2.field2) )

但当然要有正确的语法和queryparams

票数 0
EN

Stack Overflow用户

发布于 2012-11-29 08:43:50

最终做了相当多的事情:与原始解决方案相比,它的速度要快得多:)

代码语言:javascript
复制
<cffunction name="getUniqueName" output="true" returntype="Query">
    <cfargument name="q" Type="query" required="true">
    <cfargument name="uniqueColumn" Type="string" required="false" default="ID">
    <cfargument name="languageId" Type="string" required="false" default="">

    <cfif languageID EQ ''><cfset languageID = #session.langID#></cfif> <!--- default language id to user language id --->

    <!--- Get all items that match language ID --->
    <cfquery dbtype="query" name="qwLangId">
        SELECT *
        FROM 
          q
        WHERE 
          languageid = #languageId#  
    </cfquery>

    <!--- Get list of IDs for items found --->
    <cfset usedIDs = ArrayToList(qwLangId[uniqueColumn])>

    <cfif usedIDs NEQ ''>
        <!--- get all items that were not found in matched query --->
        <cfquery dbtype="query" name="qMissing">
            SELECT *
            FROM 
              q
            WHERE #uniqueColumn# NOT IN(#usedIDs#)
        </cfquery>

        <!--- combine items in a new query --->
        <cfquery dbtype="query" name="langQ">
            SELECT * FROM qwLangId
            UNION
            SELECT * FROM qMissing
            ORDER BY #uniqueColumn#
        </cfquery>
        <cfreturn langQ>
    <cfelse>
        <cfreturn q>
    </cfif>

</cffunction>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13616576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档