1

我目前正在构建一个成员调查,每个成员都会获得一个他们用来访问调查的唯一链接。一旦他们访问并提交调查,他们就不能再使用该链接。这是我到目前为止所拥有的:

<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 解决方案不起作用。我能做些什么来解决这个问题吗?

4

2 回答 2

2

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

假设您在名为membersurvey_id...

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

记录数 > 0 表示 url.em 有效。如果recordcount > 0,则membersurvey_id > 0 表示调查已经填写完毕。

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

于 2012-11-26T20:27:08.307 回答
0

我想您在完成调查以使 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。

于 2012-11-26T20:20:27.403 回答