4

「app_Update_Users」と呼ぶアプリケーションの SELECT ステートメントについて助けが必要です。このアプリケーションは、Users テーブルのレコードを更新するように設計されています。アプリケーション コードは、次のテーブルを参照します。

  • 組織
  • ユーザー

States テーブルには、米国の 50 州すべてのリストが含まれています。County テーブルには、カリフォルニア州の 58 の郡のリストが含まれています。Organization テーブルには、カリフォルニア州の 1 つ以上の郡でサービスを提供している、任意の州にある可能性のある組織のリストが含まれています。ユーザー レコードを追加または更新するときに、組織が所在する州とサービスを提供する郡に基づいて、組織のリストをフィルター処理したいと考えています。

このアプリケーションには、Users レコード内の属性の選択リストを作成するための 3 つの select-type ステートメントがあります。最初の 2 つのステートメントで機能するコードを作成しましたが、3 番目のステートメントのコードに問題があります。これらのステートメントで参照されるフィールドは次のとおりです。 - uState - uCounty - uOrganization

uState および uCounty フィールドのステートメントは、onChange Ajax 処理を呼び出して、uOrganization フィールドの選択リストの選択を更新します。最初の 2 つのフィールドの選択リストのオプションは、次のコードで選択されます。

uState フィールドの場合:

SELECT stAbbr, CONCAT(stAbbr, ' - ', stStatePK)
   FROM States 
   ORDER BY stAbbr;

uCounty フィールドの場合:

SELECT cCounty, cCounty 
   FROM Counties 
   ORDER BY cCounty;

組織は複数の郡で活動できるため、Organizations テーブルのレコードは oCounties フィールドに複数の郡をリストすることができます。したがって、uOrganization フィールドの選択リストのオプションは、現在、次のコードで選択されています。

SELECT oName
   FROM Organizations 
   WHERE oCounties LIKE '%{uCounty}%' 
   ORDER BY oName ASC ;  

次のコードを使用して、レコードが存在する州に基づいて Organizations テーブルのレコードを選択することもできます。

SELECT oName, oName
   FROM Organizations 
   WHERE oState = '{uState}' 
   ORDER BY oName ASC ;

ただし、uOrganization フィールドのオプションを選択するために使用したいロジックは、これら 2 つのコード スニペットを結合します。簡単な英語では、次のようになります。「uState フィールドが「カリフォルニア」に設定されている場合、uCounty フィールドの値に基づいて組織テーブルからレコードを選択します。uState フィールドが「カリフォルニア」に設定されていない場合をクリックし、uState フィールドの値に基づいて Organizations テーブルからレコードを選択します。

次の IF 。. . それから 。. . ELSE 構文は要点を理解しますが、機能しません。

IF uState = 'CA' THEN
   SELECT oName, oName
   FROM Organizations 
   WHERE oCounties LIKE '%{uCounty}%' 
   ORDER BY oName ASC ;  
ELSE
   SELECT oName, oName
   FROM Organizations 
   WHERE oState = '{uState}' 
   ORDER BY oName ASC ;
ENDIF

このコードを書く正しい方法は何ですか?

4

2 に答える 2

5

ifこれはwith ステートメントなしで実行できます。

SELECT oName, oName
FROM Organizations 
WHERE (ustate = 'CA' and oCouties like '%{uCounty}%') or
      (uState <> 'CA' and oState = '{uState}')
ORDER BY oName ASC ;
于 2013-01-28T02:49:51.473 に答える
0

where条件でifステートメントを使用できます

SELECT 
    oName, 
    oName
FROM Organizations 
WHERE 
    IF(uState = 'CA' , oCounties LIKE '%{uCounty}%' , oState = '{uState}'  )
ORDER BY oName ASC ;
于 2013-01-28T05:31:01.517 に答える