我有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 行。
最佳答案
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/