如何使用多个值来爆炸字段中的单词?

时间:2014-10-21 16:28:05

标签: php foreach autocomplete

我有这个表: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文件     function getAutocomplete($ term){

    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时,我不会说话。 但是当我输入元素的第一个单词(公寓)时,我会接受所有的单词。

这些话不是独一无二的

2 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分:0)

尝试使用这样来获得所有可能的结果

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