2014-10-21 3 views
0

У меня есть эта таблица: TABLE_ELEMENTS, с именем ELEMENTS, у меня есть несколько значений внутри, см. Изображение.Как можно взорвать слова из поля с несколькими значениями?

enter image description here

enter image description here

Это PHP и возвращает результаты из запроса автозаполнения.

$("#autocomplete").autocomplete({ 
    source: "http://localhost/include/autocomplete.php?type=mauto_complete", 

Сначала я называю это ..

if(isset($_GET['type']) && in_array($_GET['type'], $arr_action)) $type=$_GET['type']; 

if($type == "mauto_complete") { 
    require_once $config_abs_path."/autocomplete/autocomplete.php"; 
    if(isset($_GET['term'])) { 
    $term = escape($_GET['term']); 
    $response = mauto_complete::getAutocomplete($term); 
    echo json_encode($response); 
} 

} 

И это secondauto.php файл функция getAutocomplete ($ термин) {

global $db; 
    global $config_table_prefix; 
    global $crt_lang; 

    $elements=$db->fetchRow("select Distinct `elements` from TABLE_ELEMENTS where `elements` like '$term%' limit 10"); 
    $elements_array = explode("|", $elements); 
    return $elements_array; 
} 

меня написать это после того, как выбрать

$elements_array = explode("|", $elements); 

Хорошо, что запрос работает нормально, но в результатах автозаполнения, когда я набираю слово Building, я не беру слов. Но когда я набираю первое слово элементов (Квартира), я беру все слова.

Слова не стоимость создания эксклюзивной

+0

'$ термин%' является * начинается с *, для * содержит * использовать '% $ термин%' –

+0

Это сейчас я получаю результаты для каждого слова, но теперь, если я набираю buildi ... другими словами, он остается открытым в autocomplete – Olympus

ответ

0

Использование Try, как это, чтобы получить все возможные результаты

$elements=$db->fetchRow("select distinct `elements` from TABLE_ELEMENTS where lower(`elements`) like lower('%$term%') limit 10"); 
+0

Показывает мне один пустой результат – Olympus

1

Общий подход к этой цели является добавление | слева от поля, то поиск этого. Это гарантирует, что элемент, содержащий поиск, не будет согласован.

select 
    Distinct `elements` 
from 
    TABLE_ELEMENTS 
where 
    lower(CONCAT('|', `elements`)) LIKE lower('%|$term%') 

Однако вы, вероятно, ищете что-то еще. Ниже я подхожу к нему. Я не мог понять, какую библиотеку вы использовали для своего подключения, поэтому вам, возможно, придется немного поменять, чтобы она работала для вас.

function getAutocomplete($name, $term) 
{ 
    // make sure you escape the string to avoid SQL injection 
    $name = mysqli_real_escape_string($db, $name); 

    // make the searches case-insensitive 
    $term = strtolower($term); 

    // fetch the valid elements for the field and split them using explode 
    $elements = $db->fetchRow("SELECT `elements` FROM `TABLE_ELEMENTS` WHERE `name` = '$name'"); 
    $elements_array = explode('|', $elements); 

    // make an array to save the matching elements 
    $filtered = array(); 

    // iterate over each element to check for a match 
    foreach($elements_array as $element) 
    { 
     // check to see if the beginning of the element starts with the search term 
     if(strpos(strtolower($element), $term) === 0) 
     { 
      // add it to the filtered array 
      $filtered[] = $element; 
     } 
    } 

    // return the matching results 
    return $filtered; 
} 

Затем, чтобы использовать его, указать, какое поле вы хотите автозаполнения:

print_r(getAutocomplete('Property Type', 'B')); 

// Outputs: Array 
// (
//  [0] => Building 
//  [1] => Bungalow 
//  [2] => Business 
//) 

Для того, чтобы существующий код, чтобы использовать его, изменить JavaScript, чтобы соответствовать нижеследующему. Вам нужно будет изменить имя в зависимости от того, какое поле вы занимаетесь автозаполнением.

$("#autocomplete").autocomplete({ 
    source: "http://localhost/include/autocomplete.php?type=mauto_complete&name=Property%20Type" 
}); 

Затем обновите файл, в котором вы вызываете функцию getAutocomplete:

if(isset($_GET['type']) && in_array($_GET['type'], $arr_action)) $type=$_GET['type']; 

if($type == "mauto_complete") { 
    require_once $config_abs_path."/autocomplete/autocomplete.php"; 
    if(isset($_GET['term']) && isset($_GET['name'])) { 
     $name = $_GET['name']; 
     $term = $_GET['term']; 
     $response = mauto_complete::getAutocomplete($name, $term); 
     echo json_encode($response); 
    } 
} 
+0

Я не принимаю никаких результатов без $ elements_array = explode ("|" , $ elements); и с этим я беру все результаты, но снова покажу мне все слова снова – Olympus

+0

Хорошо, я обновил свой ответ, посмотрю на мое изображение в sql – Olympus

+0

@JohnStamoutsos Хорошо. Теперь, если я ищу b, вы хотите, чтобы ваша функция getAutocomplete() возвращала здание, бунгало и бизнес? –

Смежные вопросы