【问题标题】:More Efficient Name Querying更高效的名称查询
【发布时间】:2013-09-16 08:06:13
【问题描述】:

我的问题很简单,但我认为的解决方案并不那么简单。

所以,我正在寻找一种有效的方法来使用 PHP 和 mySQL 使用学生的姓名来查询 students 表。目前,我有这个代码:

 SELECT * from students 
 WHERE student_number='$searchKey' //can also search using student number
 OR student_fname LIKE '%$searchKey%'
 OR student_lname LIKE '%$searchKey%'
 OR concat(student_lname,' ',student_fname) LIKE '%$searchkey%'

其中$searchKey 是搜索变量。这种类型的数据库查询对于一个单词或一个名字的名字足够有效。

问题是,如果我正在寻找“John James Smith”,但我只知道他的名字是“John Smith”,该怎么办?我怎样才能检索到“John James Smith”记录?所有的答案将不胜感激。提前致谢。

【问题讨论】:

  • 在 MySQL 中,有专门为此设计的FULLTEXT INDEXING
  • 小心:这看起来对 sql 注入很开放......
  • @arkascha 不是。搜索变量在成为 $searchKey 之前会经过不同的过滤,然后我将它扔给函数 :) 另外,我使用 CodeIgniter 活动记录,它会自动转义变量。
  • @AlmaDoMundo 如何修改表格以允许全文索引?
  • @ChristianCastillo 您是否通过我上面发布的链接阅读了手册页?

标签: php mysql database


【解决方案1】:

尝试为% 交换空格

LIKE "%John%Smith%"

将返回“约翰·詹姆斯·史密斯”

要交换角色,您可以这样做:

$searchKey = str_replace(' ', '%', $searchKey);

【讨论】:

  • 嗨。谢谢回答。但我有一个问题..我怎样才能交换它?一个变量以关键字作为其值被抛出,那么我如何才能用通配符实际交换空格?
【解决方案2】:

试试 WHERE (student_number+student_fname +student_lname) 比如'%$searchKey%'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-13
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    • 2011-06-14
    相关资源
    最近更新 更多