2012-11-26 80 views
1

我目前正在建立一个成员调查,每个成员都有一个他们用来访问调查的独特链接。一旦他们访问并提交调查,他们就不能再使用该链接。以下是我迄今为止: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已经submited。现在,如果在URL中发布了有效的成员标识,因为它通过了“IF”部分,但是如果IF部分未通过,则不会运行任何查询,因此我的.recordcount解决方案无法工作。我能做些什么来解决这个问题吗?

回答

2

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

假定有一个主(或至少是唯一的)在名为membersurvey_id的membersurvey表键...

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

甲的RecordCount> 0意味着url.em是有效的。如果记录数> 0,则memberurvey_id> 0表示调查已填写完毕。

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

+0

如何在cfif语句中引用membersurvey_ID? – Amir

+1

Travis

+1

与其他任何查询列相同。即发现“>调查”。做些什么' – Leigh

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,你需要扭转你.recordCount值你的cfif。

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

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

你仍然需要扭转你的.recordCounts在CFIF。

+0

这不起作用,因为me_number存储在不同的表中。调查表在这一点上是空白的,并且只有在填写完调查表后才会填写。 – Amir

+0

那么phantom42的答案的前提更适合。 – Travis

相关问题