Pregunta

Tengo la búsqueda en vivo de trabajo con AJAX y 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%'";

Quiero el resultado de la búsqueda, busque desde la primera letra no desde el medio o el último, por ejemplo:
Palabra clave = Jo
Resultado que quiero =
* John Becks
* Jonathan Wilko * Katy Joans

Por un momento, el sistema recoge no solo las primeras palabras, incluso medias y últimas palabras,
* Tony Nesjo
* Bajoz Zacks

¿Fue útil?

Solución

Solo elimina el primero % de cada uno de tus LIKE instrumentos de cuerda.

$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%'";

Dicho esto, deberías De Verdad, De Verdad Investigue el uso de PDO o similar y envíe una consulta límite, donde cada parámetro se escape adecuadamente para evitar ataques de inyección SQL.

Sin embargo, si hace eso, el SQL se vuelve un poco más complicado, porque no puede unir un parámetro dentro de una cadena, por lo que la adición de la % tiene que hacerse como una concatenación 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(?, '%')";

(Luego produzca un mango de instrucción preparado y ejecute con los parámetros apropiados: encontrará muchos ejemplos de lo que sea en StackOverflow).

Otros consejos

Puedes usar Regexp operador como así:

$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'";
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top