MySql - 自动完成

时间:2009-12-17 10:00:31

标签: sql mysql

我正在创建一个Ajax自动完成应用程序,并想知道是否有一个我可以用于此目的的SQL查询 - 例如,如果某人键入“p”我想要检索以“p”开头的所有单词,如果他们添加“e”检索以“pe”开头的所有单词 - 并继续这样。

有人建议下面的查询,但我不认为这是我正在寻找的:

$query = "SELECT* FROM nametable WHERE names LIKE '$partialstring' ";

5 个答案:

答案 0 :(得分:3)

$query = "SELECT* FROM nametable WHERE names LIKE '$partialstring%' ";

我只在右侧添加了%,因为您只想使用以输入字母开头的单词。

但是,在针对SQL注入过滤它之前,请不要使用此查询。

答案 1 :(得分:2)

这应该有效:

$query = "SELECT * FROM nametable WHERE names LIKE '$partialstring%'"

%是SQL中的通配符。

编辑:是的,请sanitize that input

答案 2 :(得分:1)

除了常规的特殊字符外,您必须在LIKE clauses中逃避具有特殊含义的字符。

我还没有对代码进行全面测试,但它应该是这样的,假设你使用的是PHP和旧的mysql扩展名(你没有提到):

$escape = '|';

$like = strtr(
    mysql_real_escape_string($partialstring),
    array(
        '%' => $escape . '%',
        '_' => $escape . '_',
        $escape => $escape . $escape,
    )
);

$query = "SELECT names FROM nametable WHERE names LIKE '$like%' ESCAPE '$escape' ORDER BY names LIMIT 10";

另外,不要忘记在名称列上创建索引。

答案 3 :(得分:0)

假设您正在清理该输入,它应该是:

$query = "SELECT* FROM nametable WHERE names LIKE '$partialstring%' ";

答案 4 :(得分:0)

您可以像Henning和其他人一样编写查询。并且,是的,请清理输入以防止注入攻击。我还发现,当有大量记录时,这种方法相当慢。如果你想在'GeorgeW Bush Senior'这个词中匹配' Bush ',那么上面提到的方法就行不通了。在这种情况下,您必须使用查询

  select name from nametable where name like '%match%';

尝试查看mysql full text query方法。在某些情况下它非常方便。