SQL查询能否提供ColdFusion可以使用的值?

SQL查询能否提供ColdFusion可以使用的值?,sql,coldfusion,Sql,Coldfusion,我目前正在建立一个成员调查,每个成员都会获得一个唯一的链接,用于访问调查。一旦他们访问并提交调查,他们就不能再使用该链接。以下是我到目前为止的情况: <cfquery name="SurveyTaken" maxrows="1" datasource="#APPLICATION.DATASOURCE#"> IF EXISTS (SELECT 1 FROM AllMembers WHERE me_number = <cfqueryparam value="#URL

我目前正在建立一个成员调查,每个成员都会获得一个唯一的链接,用于访问调查。一旦他们访问并提交调查,他们就不能再使用该链接。以下是我到目前为止的情况:

<cfquery name="SurveyTaken" maxrows="1" datasource="#APPLICATION.DATASOURCE#">
        IF EXISTS (SELECT 1 FROM AllMembers WHERE me_number = <cfqueryparam value="#URL.em#" cfsqltype="cf_sql_char">)
        SELECT * FROM MemberSurvey         
        WHERE me_number = <cfqueryparam value="#URL.em#" cfsqltype="cf_sql_char"> 
</cfquery>

<cfif SurveyTaken.recordcount eq 1>

    <p>We are sorry but it seems that you have already taken the survey. This link has been used and is no longer valid.</p> 

<cfelseif SurveyTaken.recordcount eq 0>
    <cfquery name="SurveyIndividual" maxrows="1" datasource="#APPLICATION.DATASOURCE#">        
        SELECT  * 
        FROM    AllMembers         
        WHERE   me_number = <cfqueryparam value="#URL.em#" cfsqltype="cf_sql_char"> 
    </cfquery>

    <cfform action="" method="post" id="addCommentForm" onsubmit="return submit_form()">
    .... etc...
</cfif>

基本上,我希望我的SQL查询首先检查成员ID是否有效,然后在另一个表中检查成员ID是否已提交。现在,如果在URL中发布了有效的成员id,则它可以工作,因为它传递了if部分,但如果未传递if部分,则不会运行任何查询,因此my.recordcount解决方案不起作用。我能做些什么来解决这个问题吗?

我想在调查完成后,您正在录制一些东西,以使id无效?类似于set idValid=0

你可能想做一些更像

SELECT * 
FROM 
    MemberSurvey         
WHERE me_number = <cfqueryparam value="#URL.em#" cfsqltype="cf_sql_char"> 
and idValid is NULL
由于这将返回0条记录,其中包含完成调查的假ID或好ID,因此您需要在cfif中反转.recordCount值

或者,如果只是从表中删除ID,只需使用

SELECT * 
FROM 
    MemberSurvey         
WHERE me_number = <cfqueryparam value="#URL.em#" cfsqltype="cf_sql_char"> 

您仍然需要反转cfif中的.recordCounts。

我在这里做一些假设,因为我不知道您的确切模式

假设membersurvey表中名为membersurvey\u id的主键或至少唯一键

recordcount>0表示url.em是有效的。如果recordcount>0,则membersurvey\u id>0表示调查已经填写


注意,我使用了MSSQL的ISNULL函数。您没有确切指定正在使用的数据库类型,因此您可能需要使用该函数的特定于软件包的版本。

这不起作用,因为me_编号存储在不同的表中。此时调查表为空,仅在填写调查后才填充。那么phantom42答案的前提更合适。如何在cfif语句中引用membersurvey_ID?与任何其他查询列相同。调查发现。如果返回多行并且没有在指定查询的循环中,请执行某些操作或可能包括行号。请确保首先检查query.recordCount以验证行号是否存在。
SELECT  m.me_number, ISNULL(s.membersurvey_id,0) AS membersurvey_id
FROM allmembers m
    LEFT OUTER JOIN membersurvey s ON m.me_number = s.me_number
WHERE m.me_number = <cfqueryparam value="#url.em" cfsqltype="cf_sql_char">