2013-04-09 5 views
-2

Это мой запрос sql. Мне нужно искать имя и фамилию, используя поиск.используя concat select firstname и lastname search

$result = 'SELECT * FROM resume 
      WHERE (first_name LIKE "'.$sKeyword.'%" OR 
        last_name LIKE "'.$sKeyword.'%" OR 
        CONCAT(first_name," ",last_name) like "'.$sKeyword.'%" OR 
        email LIKE "'.$sKeyword.'%" OR 
        phone LIKE "'.$sKeyword.'%" OR 
        zip_code LIKE "'.$sKeyword.'%" OR 
        find_us LIKE "'.$sKeyword.'%")'; 
+0

В чем проблема? –

+0

, так вы получаете какую-либо ошибку? –

+0

ну, есть ли какие-либо ошибки или что-то еще ... потому что я думаю, что это сработает просто отлично .. –

ответ

0

Прежде чем запускать запрос, просто проверьте, что данные присутствуют в таблице.

попробовать что-то, как показано ниже:

$fullName = "john martin"; 
$nameArray = explode(" ",$fullName); 
if(count($nameArray)>1) 
    $search = " first_name in (".implode(',',$nameArray).") OR last_name in (".implode(',',$nameArray).")"; 
else 
    $search = " first_name LIKE "%'.$sKeyword.'%" OR last_name LIKE "%'.$sKeyword.'%" OR" 

$seresult='SELECT * FROM resume 
      WHERE ('.$search.' 
        email LIKE "%'.$sKeyword.'%" OR 
        phone LIKE "%'.$sKeyword.'%" OR 
        zip_code LIKE "%'.$sKeyword.'%" OR 
        find_us LIKE "%'.$sKeyword.'%")'; 

EDIT: В соответствии с Вашим комментарием обновил запроса

+0

ok Спасибо, суреш. Надеюсь, это сработает для меня –

+0

так раш вы можете сказать мне правильный путь для этого. –

+0

actully, когда я положил полное имя в поиске, например (john martin), он не дает мне никакого результата :( –

2

принести результат в виде простого запроса и отображения результата с помощью concatination ...

$seresult='SELECT * FROM resume 
      WHERE (first_name LIKE "%'.$sKeyword.'%" OR 
        last_name LIKE "%'.$sKeyword.'%" OR 
        email LIKE "%'.$sKeyword.'%" OR 
        phone LIKE "%'.$sKeyword.'%" OR 
        zip_code LIKE "%'.$sKeyword.'%" OR 
        find_us LIKE "%'.$sKeyword.'%")'; 

и после отображения

<?= $seresult['first_name']; ?>-<?= $seresult['last_name']; ?> 
0

попробовать этот

 $seresult='SELECT * FROM resume 
      WHERE (first_name LIKE "%'.$sKeyword.'%" OR 
          first_name LIKE "'.$sKeyword.'%" OR 
          first_name LIKE "%'.$sKeyword.'" OR 
          last_name LIKE "%'.$sKeyword.'%" OR 
          last_name LIKE "'.$sKeyword.'%" OR 
          last_name LIKE "%'.$sKeyword.'" OR 
          email LIKE "%'.$sKeyword.'%" OR 
          phone LIKE "%'.$sKeyword.'%" OR 
          zip_code LIKE "%'.$sKeyword.'%" OR 
          find_us LIKE "%'.$sKeyword.'%")'; 
0

отщепления ОШ в различные UNIONed запросы должны позволить MySQL более эффективно использовать свои индексы.

Я предполагаю, что вы ищете предметы, которые начинаются только с введенной фразы. Если это так, это может помочь, поскольку он будет выполнять только комбинированный поиск first_name и last_name, если в поисковой фразе есть пробел.

$result = "SELECT * FROM resume 
      WHERE first_name LIKE '$sKeyword%' 
      UNION 
      SELECT * FROM resume 
      WHERE last_name LIKE '$sKeyword%' 
      UNION 
      SELECT * FROM resume 
      WHERE email LIKE '$sKeyword%' 
      UNION 
      SELECT * FROM resume 
      WHERE phone LIKE '$sKeyword%' 
      UNION 
      SELECT * FROM resume 
      WHERE zip_code LIKE '$sKeyword%' 
      UNION 
      SELECT * FROM resume 
      WHERE find_us LIKE '$sKeyword%' 
      UNION 
      SELECT * FROM resume 
      WHERE CONCAT(first_name,' ',last_name) like '$sKeyword%'"; 

$sKeywordArray = explode(' ', $sKeyword); 
IF (count($sKeywordArray) > 1) 
{ 
    $result2 = array();  
    foreach($sKeywordArray $value) 
    { 
     $result2[] = "(first_name like '$value%' OR last_name like '$value%')"; 
    } 
    $result .= " UNION SELECT * FROM resume WHERE ".implode(' AND ', $result2) 
} 
Смежные вопросы