【问题标题】:PDO search queryPDO 搜索查询
【发布时间】:2014-11-07 10:13:25
【问题描述】:

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).'%' ));

【问题讨论】:

  • 我们可以看到The query
  • @Hanky웃Panky 当然,添加了我现在正在使用的类似查询,但它没有给出我想要的结果。
  • 提示:您可以在 PHP 中的字符串中使用换行符,在您的查询中也是如此。如果你这样做,它会让你自己更具可读性。

标签: php sql oracle pdo


【解决方案1】:

有点脏,但简单的解决方案是在搜索中包含空格:

WHERE ' ' || Name LIKE '% Anderson%'

你看我在Name前面加了一个空格,所以如果它在字符串的开头,它也会找到这个词。

或者,您可以使用REGEXP_LIKE,但它仍然有点尴尬,因为Oracle 在其正则表达式引擎中没有word boundary 表达式。解决方案见this answer

【讨论】:

  • 谢谢您的回复先生。但是如果有三个空格,因为一个人的全名是不确定的。 e-g Rameez Hassan Mir,然后又不行了?
  • 我似乎忘记了% 字符之一。我现在修好了。我认为这对 Rameez 先生也应该有用:WHERE ' ' || Name LIKE '% Hassan Mir%'WHERE ' ' || Name LIKE '% Mir%' 都应该找到他。
  • 哇,它工作你太棒了.. 它在 mysql 中工作,我也会在 PDO 中尝试这个.. 我希望它在那里工作.. 非常感谢..
  • 不错。 :) 但是.. MySQL?你的问题标签上写着“oracle”。
  • 是的,我想要 oracle,但那时我只在笔记本电脑上安装了 mysql,这就是为什么我说我会尝试使用 mysql.. 尝试使用 Oracle DB。它奏效了。
猜你喜欢
  • 2014-11-03
  • 2015-03-17
  • 2017-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-09
  • 2019-08-21
  • 1970-01-01
相关资源
最近更新 更多