PHP Mysql搜索查询
你好,我有一个简单的搜索查询,我面对的是当有人写下他想要搜索的用户的唯一名字时,我的查询会找到它,当有人只在输入中写下姓氏并发布时,它也会显示出来,但是当用户在输入中同时写下名字和姓氏时,即使用户存在,也找不到。$q查询的最后一部分,我写了名字和类似姓氏的部分不起作用,我知道我的逻辑不好,但我如何修复它PHP Mysql搜索查询,php,mysql,search,pdo,Php,Mysql,Search,Pdo,你好,我有一个简单的搜索查询,我面对的是当有人写下他想要搜索的用户的唯一名字时,我的查询会找到它,当有人只在输入中写下姓氏并发布时,它也会显示出来,但是当用户在输入中同时写下名字和姓氏时,即使用户存在,也找不到。$q查询的最后一部分,我写了名字和类似姓氏的部分不起作用,我知道我的逻辑不好,但我如何修复它 try { $q = "SELECT * FROM `members` WHERE `first_name` LIKE :search_string OR `last_n
try {
$q = "SELECT * FROM `members` WHERE `first_name` LIKE :search_string OR `last_name` LIKE :search_string OR `first_name` AND `last_name` LIKE :search_string";
$q_do = $db->prepare($q);
$q_do->execute( array("search_string"=>'%'.$query.'%') );
$number = $db->query("SELECT FOUND_ROWS()")->fetchColumn();
} catch(PDOException $e) {
$log->logError($e." - ".basename(__FILE__));
}
多谢各位
SELECT *
FROM `members`
WHERE `first_name` LIKE :search_string
OR `last_name` LIKE :search_string
OR `first_name` AND `last_name` LIKE :search_string;
和
是运算符而不是连接符
SELECT *
FROM `members`
WHERE `first_name` LIKE :search_string
OR `last_name` LIKE :search_string
OR CONCAT(`first_name`,' ', `last_name`) LIKE :search_string;
因此,您所做的不是:
用户输入“First-Last”
您可以搜索:
First like '%First Last%' or Last like '%First Last%' ...
您需要使用全文搜索索引
或者类似的
尝试使用concat:
$q = "SELECT * FROM `members` WHERE `first_name` LIKE :search_string
OR `last_name` LIKE :search_string
OR concat(`first_name` , ' ', `last_name`) LIKE :search_string";
试试这个:
$query = explode(" ", $query);
if(count($query)>1){
$fname = $query[0];
$lname = end($query);
}else{
$fname = $query[0];
$lname = $query[0];
}
$q = "SELECT * FROM `members` WHERE `first_name` LIKE :fname OR `last_name` LIKE :lname";
$q_do = $db->prepare($q);
$q_do->execute( array('fname' => "%$fname%", 'lname' => "%$lname%") );
最简单的搜索查询。。试试这个,它的工人。
从
TableName
中选择*WHEREtitle
如“%Your Search Text%”这是用户写入搜索输入的内容。+1是一个聪明的答案,它可能适合询问者想要做的事情,但全文搜索仍然是一个更好的方法。当然,但可能有少于4个字符的名称,为此,您必须编辑my.cnf。您可以在这两个字段上添加一个组合索引,以使其快速处理大量行。全文搜索或任何搜索引擎都是更好的选择。因为这些问题往往会很快变得复杂。千万不要这样做。使用合适的工具。全文搜索任何搜索引擎都会做得更好。你的解决方案会产生更多的问题!