PDO,我想使用搜索查询。我尝试使用类似查询,在搜索变量的前端和末尾使用%
。但它在两个词之间进行搜索。
就像在数据库中有名称Jhon Anderson
,如果我使用LIKE %erson%
使用搜索变量,查询将获得包含上述名称的行。
但我想要的是查询应该只搜索起始字母表,所以我尝试使用Jhon%
的LIKE查询,我得到了所需的结果,但最后使用此%
只有在搜索变量匹配起始时才有效第一个单词,但空格后的单词怎么样?
我的意思是,如果我尝试Anderson%
或Ander%
,查询将无法获得此行的结果,因为Anderson是空格后Jhon Anderson
字段中的第二个单词。
所以我的问题是如何搜索空格后的单词,如果有起始字母与搜索查询匹配。
我不知道是否存在这样的查询,但我认为在使用带有通配符'%'.$variable.'%'
的类似查询之后可能会出现一些循环,并且在获取所有结果后取消设置数组或搜索变量与结果的第一个字母不匹配的行。
任何想法如何实现这种搜索。
现在查询我正在使用,
$stmt = $conn->prepare("SELECT ROOM, GUEST_NAME, GUEST_FIRST_NAME, CONFIRMATION_NO, DEPARTURE, PWD FROM RESERVATION_GENERAL_2 WHERE LOWER(GUEST_FIRST_NAME) LIKE ? OR LOWER(GUEST_NAME) LIKE ?");
$stmt->execute(array('%'.strtolower($searchFilter).'%','%'.strtolower($searchFilter).'%' ));
答案 0 :(得分:1)
有点脏,但简单的解决方案是在搜索中包含空格:
WHERE ' ' || Name LIKE '% Anderson%'
您看到我在Name
前面添加了一个空格,因此如果它位于字符串的开头,它也会找到该字词。
或者,您可以使用REGEXP_LIKE
,但由于Oracle在其正则表达式引擎中没有word boundary
表达式,因此它仍然有点尴尬。有关解决方案,请参阅this answer