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

时间:2012-11-26 20:07:45

标签: sql coldfusion

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

<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部分,则不会运行任何查询,因此我的.recordcount解决方案不起作用。我有什么办法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

我在这里做了一些假设,因为我不知道你的确切架构。

假设您在名为membersurvey_id的memberurvey表中有一个主要(或至少是唯一的)...

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">

记录数量&gt; 0表示url.em有效。如果记录数量> 0,然后是membersurvey_id&gt; 0表示调查已经填写完毕。

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

答案 1 :(得分:0)

我想你在完成调查时会记录一些东西以使身份无效?类似于set idValid = 0

您可能想要做更像

的事情
SELECT * 
FROM 
    MemberSurvey         
WHERE me_number = <cfqueryparam value="#URL.em#" cfsqltype="cf_sql_char"> 
and idValid is NULL

由于这将返回0条记录,其中包含假身份证或已完成调查的良好ID,因此您需要在cfif中撤消.recordCount值。

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

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

您仍然需要在cfif中撤消.recordCounts。