【问题标题】:Searching full name or first or last name in MySQL database with first and last name in separate columns在 MySQL 数据库中搜索全名或名字或姓氏,名字和姓氏在不同的列中
【发布时间】:2012-04-06 17:10:30
【问题描述】:

我正在使用一个现有的数据库,该数据库的名字和姓氏在数据库中是分开的。我需要创建一个函数,该函数将接受一个搜索输入并返回结果。说我的数据库的结构类似于....

nameFirst nameLast
Joe       Smith
Joe       Jones
Joe       Brown

我如何使用 MySql 输入“Joe Smith”这样的搜索输入并获得他的行?但是,如果我在搜索字段中只输入“乔”,则全部返回?我需要用空格爆炸字符串吗?谢谢!

【问题讨论】:

  • 您还需要查找“Smith, Joe”还是“Joseph Smith”?
  • 分解字符串是一种方法,但如果涉及中间名首字母或名字怎么办?
  • 搜索很可能像“Joe Smith”......数据库中也有一些实例,其中有 .Jrs 等

标签: php mysql


【解决方案1】:
SELECT * 
FROM table
WHERE CONCAT( nameFirst,  ' ', nameLast ) LIKE  '%Joe%'  

确保清理所有用户提交的参数,例如“Joe”

【讨论】:

  • 我使用了 codeigniter activerecord 但这是我最终使用的... $term = $search_array['term']; $query = $this->db->query("SELECT * FROM Database WHERE CONCAT(nameFirst, '', nameLast) LIKE '%$term%'");
  • fullname 字段可以添加到数据库表中!它会快得多。
  • 完美。谢谢你。当您遇到无法更改表的情况时,这种类型的查询可以节省您的时间。
【解决方案2】:
SELECT * FROM table WHERE CONCAT(nameFirst, ' ', nameLast) LIKE 'Joe%';

如果您确定您的搜索输入以“Joe”开头以过滤更多信息,我建议使用此选项。

以我的拙见,在很多情况下,我们不知道搜索输入是姓名还是姓氏,所以我建议使用这个:

SELECT * FROM table WHERE CONCAT(nameFirst,  ' ', nameLast) LIKE  'SEARCH_INPUT%' OR CONCAT(nameLast,  ' ', nameFirst) LIKE 'SEARCH_INPUT%';

【讨论】:

    【解决方案3】:
    $sql = "SELECT * from add_contact  WHERE ( CONCAT(first_name, ' ',last_name)  LIKE '%$search%' OR first_name LIKE '%$search%' OR last_name LIKE '%$search%' OR company LIKE '%$search%') AND (archives='$archives') ORDER BY UNIX_TIMESTAMP(sort_date) DESC";
    

    【讨论】:

    • 您的答案可以通过添加有关代码的作用以及它如何帮助 OP 的更多信息来改进。
    猜你喜欢
    • 2018-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    • 2023-03-19
    • 2011-08-19
    • 1970-01-01
    相关资源
    最近更新 更多