0

動作させようとしている MySQL コードがいくつかありますが、必要なものに IF ステートメント、IF 関数、または CASE 演算子を使用する必要があるかどうかは完全にはわかりません。私はオンラインで読んでいるものと混乱してきました.複雑にならずに正しい構文でそれらのいずれかを使用する方法を簡単な言葉でレイアウトする場所を見つけることができないので、これがばかげているように思われる場合は申し訳ありません.質問。

このコードはここで機能します:

SELECT
  email,
  accountgroup, othercode
FROM
  (SELECT
        email AS email,
        accountgroup, othercode
   FROM
        accounts
   UNION ALL
   SELECT
        email2 AS email,
        accountgroup, othercode
   FROM
        accounts
   UNION ALL
   SELECT
        email3 AS email,
        accountgroup, othercode
   FROM
        accounts) account
WHERE
  email LIKE '%@%'
  AND accountgroup = '$row3' AND othercode = '$row4';

$row3 と $row4 は、POST されたユーザー定義値を格納しています。これらの値はデータベース内の列の値と一致しますが、ユーザーが -all- または -none- アカウント グループを選択できるように、この POST されたデータに -all- および -none- の値も追加しました。私の問題は、ユーザーが -all- または -none を選択した場合に SQL で何をすべきかわからないことです。IF ステートメントでうまくいくと思っていましたが、SQL でエラーが発生しており、IF ステートメントを適切に使用していないと確信しています。

IF ($row3= '-all-') THEN
SELECT
  email,
  accountgroup, othercode
FROM
  (SELECT
        email AS email,
        accountgroup, othercode
   FROM
        accounts
   UNION ALL
   SELECT
        email2 AS email,
        accountgroup, othercode
   FROM
        accounts
   UNION ALL
   SELECT
        email3 AS email,
        accountgroup, othercode
   FROM
        accounts) account
WHERE
  email LIKE '%@%'
  AND accountgroup <> '' AND othercode = '$row3';





ELSEIF ($row3 = '-none-') THEN
SELECT
  email,
  accountgroup, othercode
FROM
  (SELECT
        email AS email,
        accountgroup, othercode
   FROM
        accounts
   UNION ALL
   SELECT
        email2 AS email,
        accountgroup, othercode
   FROM
        accounts
   UNION ALL
   SELECT
        email3 AS email,
        accountgroup, othercode
   FROM
        accounts) account
WHERE
  email LIKE '%@%'
  AND accountgroup = '' AND othercode = '$row4';






ELSE 
SELECT
  email,
  accountgroup, othercode
FROM
  (SELECT
        email AS email,
        accountgroup, othercode
   FROM
        accounts
   UNION ALL
   SELECT
        email2 AS email,
        accountgroup, othercode
   FROM
        accounts
   UNION ALL
   SELECT
        email3 AS email,
        accountgroup, othercode
   FROM
        accounts) account
WHERE
  email LIKE '%@%'
  AND accountgroup = '$row3' AND othercode = '$row4';

  END IF

初心者向けにIFステートメント/関数を説明する提供できるソースと同様に、どんな助けも大歓迎です。

4

3 に答える 3

0

それはほとんどあなた次第です-あなたが望むものを使用しますが、一般的に、CASEは次のような複数の条件が存在する可能性がある場合に使用されます:

CASE ( value ) {
  $a = 'a';
  $a = 'b'
  $a = 'c'
  $a = 'd'
  $a = 'e'
  etc.
}

そうすれば、ケースは見栄えが良くなります。また、フィールドを追加することもより簡単になります。

2 つ (またはそれ以上の可能性) のオプションしかない場合、または複数のアンダーオプションがある場合は、IF を使用します。

IF ( $a = a ) {
  IF ( $c = 2 && $d = 4 ) {
    $b = 1
  } ELSE {
    $b = 2
  }
} ELSE {
  $b = 3
}

それは一般的にです。しかし、ウィッチ ワンをいつ、どのように使用するかについては、多くのオプションがあります。

PS: 表示されているデータは単純な例であり、構文に関連したものではありません!

于 2013-11-12T11:29:08.860 に答える
0

必要に応じて、クエリの特定の列内で CASE または IF を使用できます。ただし、この場合、SQL クエリ全体の条件があります。この条件処理は PHP で行ってください。SQL ステートメントで行う必要はありません。

于 2013-11-12T11:33:54.077 に答える