你好,我有一个简单的搜索查询,我面临的是当有人写下他想要搜索的用户的唯一名字时,我的查询找到了它,当有人只在输入中写姓氏并发布它时,它也显示了这一点,但是当用户在输入中一起写名字和姓氏时, 即使用户存在,它也找不到用户。$q查询的最后一部分,我写了名字和姓氏,就像部分一样不起作用,我知道我的逻辑很糟糕,但是我该如何解决这个问题
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__));
}
谢谢
尝试使用 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";
SELECT *
FROM `members`
WHERE `first_name` LIKE :search_string
OR `last_name` LIKE :search_string
OR `first_name` AND `last_name` LIKE :search_string;
AND
是运算符而不是连接器。
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 like '%First Last%' or Last like '%First Last%' ...
需要使用全文搜索索引。
http://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html
或类似的东西
http://sphinxsearch.com/
试试这个:
$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%") );
<</div>
div class="one_answers">最简单的搜索查询。试试这个它的工作人。
从TableName
中选择 *,其中title
例如"%您的搜索文本%"