2010-06-22 78 views
1

这工作与MySQL后端麻烦ColdFusion的联合查询在CFC与MySQL数据库

在形式......

<cfselect name="to" size="1" bind="cfc:cfcs.messages.getOrganisations()" bindonload="yes" value="organisationID" display="organisationName" required="Yes"> 
    </cfselect> 
在CFC

<cffunction access="remote" name="getOrganisations" output="false" returntype="query" displayname="Get organisations list" hint="This method returns a list of organisations as a query."> 
    <cfquery name="getOrganisations" datasource='myData'> 

    SELECT organisationID, organisationName, acceptsReferral, metadataTemplate 
    FROM organisations 
    WHERE acceptsReferral 
    ORDER BY organisationName ASC; 

    </cfquery> 
    <cfreturn getOrganisations> 
</cffunction> 

但如果我尝试

<cffunction access="remote" name="getOrganisations" output="false" returntype="query" displayname="Get organisations list" hint="This method returns a list of organisations as a query."> 
    <cfquery name="getOrganisations" datasource='myData'> 
    SELECT '0' AS organisationID, 'Select' AS organisationName, false AS acceptsReferral, 0 AS metadataTemplate 
    FROM organisations 
    UNION 
    (SELECT organisationID, organisationName, acceptsReferral, metadataTemplate 
    FROM organisations 
    WHERE acceptsReferral 
    ORDER BY organisationName ASC) 

    </cfquery> 
    <cfreturn getOrganisations> 
</cffunction> 

尝试获得sele ct引导行到查询,我在firebug“JSON序列化失败:无法将二进制数据序列化到JSON”中得到此AJAX错误。

亨利的建议解决了上述问题,但我再次受到下一点的影响,试图让两个选择链接。

这工作...

<cfselect name="attentionOf" size="1" bind="cfc:cfcs.messages.getOrganisationMembers({to})" bindonload="false" value="userID" display="name" required="No" queryPosition="below"> 
<option value="0">Select</option> 
</cfselect> 

...但如果我尝试在DSN通过与绑定字段我得到“错误解析绑定”从这个

<cfselect name="attentionOf" size="1" bind="cfc:cfcs.messages.getOrganisationMembers({to}, 'mySqlData')" bindonload="false" value="userID" display="name" required="No" queryPosition="below"> 
    <option value="0">Select</option> 
</cfselect> 
+0

如果你在本地调用它,cfquery是否可以工作?附:不要忘记改变你的“getOrganisations”变量。 – Henry 2010-06-22 23:42:54

+0

是的,如果我在本地调用,它列出了查询的顶部选择,但没有ORDER BY为两个查询中的第二个。所以SQL没有发生错误。我不明白JSON错误。 – Saul 2010-06-23 00:30:27

回答

1

哦,我想这是你想要的。

<cfset organisations = createObject("component", "cfcs.messages").getOrganisations()> 

<cfselect name="to" query="organisations" 
      value="organisationID" display="organisationName" 
      required="Yes" queryPosition="below"> 
    <option value="0">Select</option> 
</cfselect> 

如果你真的需要用它来绑定工作, 尝试如果queryPosition属性适用。如果queryPosition不适用于bind,那么您需要插入额外的虚拟行。它可能更容易使用工会查询查询

+0

这样做,亨利很好。我已经添加了我的连续数据绑定到OP – Saul 2010-06-23 21:25:07

+0

为什么你需要通过DSN?没有意义。 DSN通常应该在您的应用程序范围内。如果您确实需要传递一个变量,请尝试在JS中设置DSN ='mySqlData',然后在绑定表达式中放入DSN w/o引号并尝试? – Henry 2010-06-23 21:32:33

+0

嗯,为了避免任何依赖,我正在将DSN传递给CFC,因为您可以告诉我对CFC有点新鲜感,但认为最好不要在CFC中拥有任何应用程序或会话变量? 我会将它作为一个不带引号的变量来使用 – Saul 2010-06-24 09:03:22