php - 是否可以在 mysql 或 PHP 或 CODEIGNITER 中搜索显示多个可能结果的多个单词

标签 php mysql codeigniter

我有sql表

员工表

ID firstname  lastname      bandname
------------------------------------
 1 John       Lennon        Beatles
 2 Paul       Mccartney     Beatles
 3 Ringo      Starr         Beatles
 4 George     Harrison      Beatles

现在如果我搜索“George Mccartney”,结果应该是 ID 为 4 和 2 的行

或者如果搜索“1 Paul Starr”,结果应该是包含这三个词的 3 行。

最佳答案

sqlFiddle example

SET @search = '1 Paul Starr';

SELECT *
FROM employee
WHERE @search LIKE CONCAT('%',id,'%')
   OR @search LIKE CONCAT('%',firstname,'%')
   OR @search LIKE CONCAT('%',lastname,'%');

将@search 替换为您的 PHP 代码,因为我不熟悉 PHP。

更新的答案:允许搜索子字符串以进行如下搜索:

“Geor”返回 1 行“George”
“Geor Pau”返回两行“George”和“Paul”
sqlFiddle example

SELECT *
FROM employee
WHERE 
          id LIKE CONCAT('%',SUBSTRING_INDEX(@search,' ',1),'%')
       OR id LIKE CONCAT('%',SUBSTRING_INDEX(SUBSTRING_INDEX(@search,' ',2),' ',-1),'%')
       OR id LIKE CONCAT('%',SUBSTRING_INDEX(SUBSTRING_INDEX(@search,' ',3),' ',-1),'%')
OR firstname LIKE CONCAT('%',SUBSTRING_INDEX(@search,' ',1),'%')
OR firstname LIKE CONCAT('%',SUBSTRING_INDEX(SUBSTRING_INDEX(@search,' ',2),' ',-1),'%')
OR firstname LIKE CONCAT('%',SUBSTRING_INDEX(SUBSTRING_INDEX(@search,' ',3),' ',-1),'%')
 OR lastname LIKE CONCAT('%',SUBSTRING_INDEX(@search,' ',1),'%')
 OR lastname LIKE CONCAT('%',SUBSTRING_INDEX(SUBSTRING_INDEX(@search,' ',2),' ',-1),'%')
 OR lastname LIKE CONCAT('%',SUBSTRING_INDEX(SUBSTRING_INDEX(@search,' ',3),' ',-1),'%')
;

或者如果您更喜欢下面使用 LOCATE 做同样的事情(更短的查询)
sqlFiddle example

SELECT *
FROM employee
WHERE 
   LOCATE(SUBSTRING_INDEX(@search,' ',1)                        ,CONCAT(id,firstname,lastname))>0
OR LOCATE(SUBSTRING_INDEX(SUBSTRING_INDEX(@search,' ',2),' ',-1),CONCAT(id,firstname,lastname))>0
OR LOCATE(SUBSTRING_INDEX(SUBSTRING_INDEX(@search,' ',3),' ',-1),CONCAT(id,firstname,lastname))>0
;

关于php - 是否可以在 mysql 或 PHP 或 CODEIGNITER 中搜索显示多个可能结果的多个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20210828/

相关文章:

php - INSERT ON DUPLICATE KEY UPDATE IF 语句

php - SQL 中的插入语句

php - php中\n和<br/>的区别

php使用insert语句添加到数据库

php - 按非列元素对 mysql 表进行排序

php - 无法在codeigniter中上传doc格式文件

通过 php Spark migrate -all 运行迁移时,CodeIgniter 4 plus Myth/Auth 抛出错误

php - 在 PHP 中以零为前缀进行编号

mysql - 如何用 3 个表编写带有连接和条件求和的 mysql 查询

php - 如果我想删除数据库中的数据并且它是 codeigniter 中的外键,我该如何进行限制?