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 が既に送信されているかどうかを確認します。現在、「IF」部分を渡すため有効なメンバー ID が URL に投稿されていれば機能しますが、IF 部分が渡されない場合はクエリが実行されないため、私の .recordcount ソリューションは機能しません。これを修正するためにできることはありますか?

4

2 に答える 2

2

正確なスキーマがわからないため、ここでいくつかの仮定を立てています。

membersurvey_idmembersurvey テーブルに...という名前の主キー (または少なくとも一意のキー) があると仮定します。

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 が有効であることを意味します。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

これにより、偽の ID または調査を行った適切な ID を持つレコードが 0 件返されるため、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 に答える