Поисковый запрос PHP Mysql


Здравствуйте, у меня есть простой поисковый запрос, с чем я сталкиваюсь, когда кто-то пишет единственное имя пользователя, которое он хочет найти, мой запрос находит его, также когда кто-то пишет только фамилию во входных данных и публикует ее, это тоже показывает, но когда пользователь записывает имя и фамилию вместе во входных данных, он не может найти пользователя, даже если он/она существует. Последняя часть запроса $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__));
    }

Спасибо

Author: Green Black, 2012-11-23

5 answers

Попробуйте использовать 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";
 11
Author: Green Black, 2012-11-23 18:23:40
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;
 3
Author: Popnoodles, 2014-10-09 12:22:47

Итак, чего вы не делаете, так это:

Пользователь вводит "Первый последний"

Вы ищете:

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

Вам необходимо использовать индекс полнотекстового поиска.

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

Или что-то вроде

Http://sphinxsearch.com/

 1
Author: E_p, 2012-11-23 18:23:07

Попробуйте это:

$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%") );
 0
Author: Phius, 2012-11-23 18:27:59

Самый простой поисковый запрос для вас.. Попробуй это свой рабочий человек.

ВЫБЕРИТЕ * ИЗ TableName, ГДЕ title нравится "% Ваш текст поиска%"

 0
Author: Mavericks, 2017-06-21 17:57:16