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

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";
于 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

だからあなたがしないことは:

ユーザーが「FirstLast」と入力します

あなたは検索します:

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 に答える