3

您好,我有一个简单的搜索查询,我面临的是当有人写下他想要搜索的用户的唯一名字时,我的查询会找到它,当有人只在输入中写下姓氏并发布它时,它也显示了这一点,但是当用户在输入中一起写名字和姓氏时,即使他/她存在也找不到用户。$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__));
    }

谢谢

4

5 回答 5

11

尝试使用连接:

$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";
于 2012-11-23T18:23:40.283 回答
3
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;
于 2012-11-23T18:22:30.800 回答
1

所以你不做的是:

用户输入“First Last”

你搜索 :

First like '%First Last%' or Last  like '%First Last%' ...

您需要使用全文搜索索引。

http://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html

或类似的东西

http://sphinxsearch.com/

于 2012-11-23T18:23:07.890 回答
0

试试这个:

$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%") );
于 2012-11-23T18:27:59.060 回答
0

最简单的搜索查询给你..试试这个它的工作人员。

SELECT * FROM TableNameWHERE titlelike '%Your Search Text%'

于 2017-06-21T17:57:16.983 回答