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 的用户定义值。这些值将与数据库中列的值匹配,但是我还在此 POST 数据中添加了 -all- 和 -none- 值,以便用户可以选择 -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 回答
0

根据我的说法,在 php 中使用它并使用 switch case,因为它比 if else 条件快得多

更多关于这一点的是,如果你真的想在 sql 中有条件,那么请用例。

为了更好地了解mysql中的case语句

http://dev.mysql.com/doc/refman/5.0/en/case.html

为了更好地了解 mysql 中的 if 语句

http://dev.mysql.com/doc/refman/5.0/en/if.html
于 2013-11-12T11:44:37.037 回答