【问题标题】:How to use CASE WHEN in the WHERE clause?如何在 WHERE 子句中使用 CASE WHEN?
【发布时间】:2017-08-02 19:40:05
【问题描述】:

这是我的查询的一部分:

WHERE CASE $range WHEN 'ALL' THEN TRUE
      ELSE $this->table_alias.date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1 $range))
      END

注意到$range 是一个包含单词的php 变量。它抛出此错误消息:

致命错误:未捕获的 PDOException:SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册以获取正确的语法,以便在 C:\xampp\htdocs\myweb\others\users.php 第 13 行的 'ALL WHEN 'ALL' THEN TRUE ELSE re.date_time > unix_timestam' 附近使用:120 堆栈跟踪:#0 C:\xampp\htdocs\myweb\others\users.php(120): PDO->prepare('SELECT u.id use...') #1 C:\xampp\htdocs\ myweb\others\questions.php(359): users->index(' AND categories...', ' INNER JOIN qan...', 'tagged') #2 C:\xampp\htdocs\myweb\others\ users.php(26): questions->tagged('index') #3 C:\xampp\htdocs\myweb\application\other.php(24): users->index() #4 C:\xampp\htdocs \myweb\index.php(161): require_once('C:\xampp\htdocs...') #5 {main} 在第 120 行的 C:\xampp\htdocs\myweb\others\users.php 中抛出

有人有什么问题吗?

【问题讨论】:

  • 也许在已经开放的问题上继续这个问题? stackoverflow.com/questions/45468750/…
  • $range 没有被引用并且与“ALL”进行比较。表中很可能没有名为 ALL 的列。
  • 什么是$range?那应该是PHP变量?似乎不是 MySQL 变量。 T Gray,他正在尝试进行字符串之间的比较。
  • 那个案例陈述没有意义。@ficuscr 对你的另一个问题的回答有什么问题?
  • @ficuscr 正如我在问题中提到的,$range 是一个 PHP 变量。所以最终查询看起来像WHERE CASE ALL WHEN ALL THEN ...

标签: php mysql sql pdo


【解决方案1】:

我认为你使用了错误的语法

$sql = "WHERE CASE 
    WHEN '{$range}' = 'ALL' THEN 1=1
    ELSE {$this->table_alias}.date_time > unix_timestamp(DATE_SUB(now(), INTERVAL 1 $range))
  END";

【讨论】:

  • $range 是什么?...$sql = "WHERE CASE WHEN {$range}... 也许...注意 PHP 标记并查看本系列中的上一个问题。
  • 我认为,它是 php 变量
  • 同意。但不确定是否理解。
  • 这个语法也有同样的问题。
  • 清理了一些。
猜你喜欢
  • 2015-08-09
  • 1970-01-01
  • 1970-01-01
  • 2023-01-21
  • 2022-08-08
  • 2019-01-10
  • 2019-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多