当前位置: 首页 > 知识库问答 >
问题:

如何在php预备查询中where子句后面的sql case子句中使用=,,>=运算符? [已关闭]

商冠玉
2023-03-14

我不能在WHERE子句后面使用CASE子句。 代码:已编辑

$filterQuery = "SELECT * FROM mediainfo
WHERE (CASE
        WHEN year <> 1 AND imdb = 1 AND genre = 1 THEN year >= ?                              /* withoutGenreImdb */
        WHEN year = 1 AND imdb <> 1 AND genre = 1 THEN imdb >= ?                              /* withoutGenreYear */
        WHEN year <> 1 AND imdb <> 1 AND genre = 1 THEN year >= ? AND imdb >= ?               /* withoutGenre */
        WHEN year <> 1 AND imdb <> 1 AND genre <> 1 THEN year >= ? imdb >= ? AND genre LIKE ? /* withGenre */
        WHEN year = 1 AND imdb <> 1 AND genre <> 1 THEN imdb >= ? AND genre LIKE ?            /* withoutYear */
        WHEN year <> 1 AND imdb = 1 AND genre <> 1 THEN year >= ? AND genre LIKE ?            /* withoutImdb */
      END)
LIMIT 84";

    if ($stmt = $conn->prepare($filterQuery)) {
        $stmt->bind_param("sssssssssss",$year,$rating,$year,$rating,$year,$rating,$genre,$rating,$genre,$year,$genre);
        $stmt->execute();
    }else { echo "false"; }

总是显示为false。

共有1个答案

锺离赤岩
2023-03-14

当THEN或ELSE关键字后面有条件语句,而不是某个布尔表达式时,不可能在case.。中使用比较。

因此,最好通过正确使用括号来评估带有和/或连词的语句。 在这种情况下,将THEN关键字替换为AND关键字,并将那些带括号的术语与OR关键字组合将非常适合,例如

SELECT *
  FROM mediainfo
 WHERE ( year <> 1 AND imdb <> 1 AND genre =  1 AND year >= ? AND imdb >= ? )
    OR ( year <> 1 AND imdb <> 1 AND genre <> 1 AND year >= ? imdb >= ? AND genre LIKE ? )                  
    OR ( year <> 1 AND imdb =  1 AND genre =  1 AND year >= ? )        
    OR ( year <> 1 AND imdb =  1 AND genre <> 1 AND year >= ? AND genre LIKE ? )
    OR ( year =  1 AND imdb <> 1 AND genre =  1 AND imdb >= ? )           
    OR ( year =  1 AND imdb <> 1 AND genre <> 1 AND imdb >= ? AND genre LIKE ? ) 
 LIMIT 84 
 类似资料:
  • 问题内容: 谁能给我一些关于如何将这种子查询放入提示?(我正在使用 JPA 2.0 - Hibernate 4.x ) -第二个选择将始终获得单个结果或null。 问题答案: 尝试类似以下示例的操作来创建子查询: 请注意,由于附近缺少IDE,因此该代码尚未经过测试。

  • 问题内容: 我最近才刚开始使用SQLAlchemy,但仍无法解决某些概念。 归结为基本元素,我有两个这样的表(通过Flask-SQLAlchemy): 我将如何查询用户列表及其最新帖子(不包括无帖子的用户)。如果我使用的是SQL,则可以执行以下操作: 因此,我确切地知道“期望的” SQL可以达到我想要的效果,但是不知道如何在SQLAlchemy中“正确地”表达它。 编辑:如果很重要,我使用的是SQ

  • 我试图运行以下查询从SpringBoot仓库 但总是命中错误:绑定变量的数量无效。 请就如何进一步进行提出建议。 注:我确实遵循了Spring Crude的预测结果,即VentoryIds(列表 我想执行如下操作:

  • 问题内容: 我有一个查询: 我只想从表中选择周期和年份等于的行: 我知道最简单的方法是使用连接,但是问题是-在应用程序中,我只能在后面添加一个子句 因此,解决方案应该是: 那可能吗? 编辑: 结果应与以下相同: 问题答案: 您可以为条件使用多个列: 但是戈登的解决方案可能更快。

  • 来自Teradata,我通常会创建一个包含一些变量的易失性表,我会在代码中使用这些变量。 例如。, 然后我会在SELECT WHERE子句中使用该表: 我试图在色调(Impala editor)中执行类似的操作,但遇到了一个错误: AnalysisException:第5行中的语法错误:未定义:来自表名隐藏^遇到:来自预期的:大小写、强制转换、默认值、存在、FALSE、IF、INTERVAL、NO

  • 问题内容: 我有一个包含多个搜索条件的搜索页面 员工姓名 员工ID 入职日期 部门 等等 用户可以提供一个或多个搜索条件。我需要查询数据库以获取搜索结果。 使用纯JDBC,有两种方法可以实现此目的。 通过附加用户提供的搜索条件来准备SQL查询。 例如: 使用 例如: 此答案说明,像上面的ex 1一样,可以修改ex2,如下所示 然后仔细地(牢记参数索引)将输入设置为准备好的语句。听起来这不是一个非常

  • 问题内容: 在命名查询的where子句中可能有一个like?我正在尝试执行以下操作,但出现异常 我尝试像在普通SQL中那样添加%,但是得到了异常编译。 任何指针,不胜感激! 谢谢 问题答案: 您不能在中添加%,但可以在为其分配参数的值中包含它。 如: