Вопрос

Я работал вживую в прямом эфире с Ajax и PHP

JQuery:

$("#search").keyup(function()   {
   var search_input = $(this).val();
   var dataString = 'keyword='+ search_input;
      if(search_input.length>1){
    $.ajax({
      type: "GET",
      url: "include/search.php?diary_date",
      data: dataString,
      beforeSend:  function() {
             $('#loading').addClass('loading');
          }, success: function(server_response) {                 
               $('#searchresultdata').html(server_response).show();
           $('span#faq_category_title').html(search_input);
    }
});
}return false;
});

PHP:

$q = "SELECT id_user, f_name, l_name, postcode, email,telp FROM user 
WHERE f_name LIKE '%$keyword%' 
OR l_name LIKE '%$keyword%'
OR email LIKE '%$keyword%'
OR postcode LIKE '%$keyword%'";

Я хочу результат поиска, поиск с первой буквы не с середины или последнего, например:
Ключевое слово = jo
Результат я хочу =
* Джон Бекс
* Джонатан Уилко * Кэти Джоанс

На мгновение система поднимает не только первые даже средние и последние слова
* Тони Несхо
* Баджоз Закс

Это было полезно?

Решение

Просто удалите первое % от каждого из ваших LIKE строки

$q = "SELECT id_user, f_name, l_name, postcode, email,telp FROM user 
WHERE f_name LIKE '$keyword%' 
OR l_name LIKE '$keyword%'
OR email LIKE '$keyword%'
OR postcode LIKE '$keyword%'";

Тем не менее, вы должны В самом деле, В самом деле Рассматривайте использование PDO или аналогично и отправляйте связанный запрос, где каждый параметр должным образом сбегает, чтобы предотвратить атаки впрыска SQL.

Если вы это сделаете, SQL становится немного более сложным, потому что вы не можете связать параметр внутри строки, поэтому добавление % Должен быть сделан как конкатенация SQL:

$q = "SELECT id_user, f_name, l_name, postcode, email,telp FROM user 
WHERE f_name LIKE CONCAT(?, '%')
OR l_name LIKE CONCAT(?, '%')
OR email LIKE CONCAT(?, '%')
OR postcode LIKE CONCAT(?, '%')";

(Затем создайте подготовленную ручку оператора и выполните с соответствующими параметрами - вы найдете множество примеров, где на Stackoverflow).

Другие советы

Вы можете использовать Regexp оператор как SO:

$q = "SELECT id_user, f_name, l_name, postcode, email,telp FROM user 
WHERE f_name REGEXP '^$keyword' 
OR l_name REGEXP '^$keyword'
OR email REGEXP '^$keyword'
OR postcode REGEXP '^$keyword'";
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top