pdo全文搜索-即使字符串中的关键字的一部分在db列中,也可以获取结果

ht4b089n  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(327)

我正在尝试使用这个小pdo语句搜索数据库的两列:

  1. $search = $pdo->prepare("
  2. SELECT * FROM books WHERE MATCH (title, author) AGAINST (? IN BOOLEAN MODE);
  3. ");
  4. $search->execute(array('*' . $_POST['search'] . '*'));

假设我们的字符串是:

  1. Harry Potter and the Philosopher's Stone by J.K Rowling

(我把这本书的书名和作者存储在数据库中,数据库正在使用 MyISAM 作为存储引擎)
如果我要找 Har (第一部分) Harry 关键字)我可以返回我正在寻找的结果,但如果我键入 rry (本文最后一部分) Harry 关键字)我不能得到我想要的结果。
如果关键字拼错了,有没有办法显示我想要的结果 Harru 而不是 Harry (使用尽可能少的php)?
谢谢你抽出时间来!:d

jmp7cifd

jmp7cifd1#

我不知道性能方面的问题,但您是否尝试过使用正则表达式?

  1. SELECT * from books
  2. WHERE title REGEXP "[[:<:]].*rr.*[[:>:]]"
  3. OR author REGEXP "[[:<:]].*rr.*[[:>:]]";

会得到两个词:哈利,快点,哈罗,等等。。。你可以详细说明
最终检查https://dev.mysql.com/doc/refman/5.6/en/regexp.html

20jt8wwn

20jt8wwn2#

而不是 MATCH 把它弄得乱七八糟 AGAINST 你可以简单地使用 LIKE (如果要同时搜索多个列,则必须绑定该列 $_POST['search'] 多个参数,但它会做的工作。
以下是您的新声明:

  1. $search = $pdo->prepare("
  2. SELECT * FROM books WHERE title LIKE :title OR author LIKE :author;
  3. ");
  4. $search->execute([
  5. 'title' => '%' . $_POST['search'] . '%',
  6. 'author' => '%' . $_POST['search'] . '%'
  7. ]);

相关问题