php - 如何在 WHERE 子句中使用 CASE WHEN?

标签 php mysql sql pdo

这是我的查询的一部分:

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

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

Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'ALL WHEN 'ALL' THEN TRUE ELSE re.date_time > unix_timestam' at line 13 in C:\xampp\htdocs\myweb\others\users.php:120 Stack trace: #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} thrown in C:\xampp\htdocs\myweb\others\users.php on line 120

有人出什么问题了吗?

最佳答案

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

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

关于php - 如何在 WHERE 子句中使用 CASE WHEN?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45469600/

相关文章:

mysql - SQL 帮助在忽略右侧的条件下计算 LEFT JOIN 的行数

php - 通过单个查询获得类别和子类别

php - 如何为 WAMP 2.5 安装 ImageMagick

php - 如何将多维数组的嵌套数组插入到mysql中

MySQL:将具有parent_id填充的行放在父id之后

sql - 在 SQL 中执行 EXEC 时使用字符串中的变量值

php - 有什么办法可以组合这两个查询语句吗?

php - mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows 等...期望参数 1 是资源

mysql - SQL查询两列有关系

用于将条件应用于连接中的多行的 SQL