php - SQLite3 CASE和LIKE语句的困难

标签 php sqlite

我在sqlite3中有一条声明给我带来了一些麻烦。我部分理解为什么它不起作用,我只需要找出一个解决方案。我有一列包含标题。有些标题以“ The”作为前缀。我想跳过“ The”并抓住下一个相关角色。基本上,我想用字母A来获取所有结果。例如“ The Abyss”。我想忽略“ The”和空格,看看下一个字母是否与搜索有关。但是,并非所有标题都带有“ The”前缀。这是我的sqlite3语句。我知道这是行不通的,因为我仅按列中的第一个字符进行搜索,因此无法查看是否存在“ The”。我该如何工作?

SELECT *,CASE WHEN substr(MovieTitle,1,4) = 'The ' THEN
substr(MovieTitle,5) ELSE MovieTitle END FROM Movies WHERE MovieTitle LIKE 'a%'

最佳答案

因此,如果我搜索“ a”,则应调出“ The Abyss”,使用“ c”,则应调出“ The Croods”。您可以将CASE语句与WHERE结合使用以获得结果。还要注意,我添加的lower()函数是为了捕获单词'The'-'the'The'the'the'

SELECT * from movies   WHERE
( 
    CASE WHEN lower( substr( MovieTitle,1,4) ) = 'the ' 
    THEN  
    substr( MovieTitle,5) 
    ELSE  MovieTitle END COLLATE NOCASE 
) like 'C%'  

COLLATE NOCASE


`COLLATE NOCASE` Above will catch all variations of the next word like 'Croods' - 'croods' or ' CroodS'



的PHP


$sql = "SELECT * from movies   WHERE
        ( 
            CASE WHEN lower( substr( MovieTitle,1,4) ) = 'the ' 
            THEN  
            substr( MovieTitle,5) 
            ELSE  MovieTitle END COLLATE NOCASE 
        )   like :searchText  

        COLLATE NOCASE";


$db = new SQLite3('mydb.db');

$stmt = $db->prepare($sql);
$stmt->bindValue(':searchText', $keyword . '%' , SQLITE3_TEXT); //$keyword is user typed
$result = $stmt->execute();
var_dump($result->fetchArray());

关于php - SQLite3 CASE和LIKE语句的困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48897695/

相关文章:

php - 执行时在 php 文件中收到通知

c++ - 如何在qt中修复 "No query Unable to fetch row"

PHP SQLite3::执行失败

android - 列表返回空值

c# - 如何在.Net中使用SQLCipher

php/mysql 除法结果显示为 6.2E-5

php - 在 Laravel 中使用 Vue 组件

php - 如何在php中使用管理员和用户制作登录表单

php - Chrome 将 PHP 文件的内容加载到 CSS 文件中

java - SQLite如何使用整数来存储价格值