2011-08-17 167 views
0

我使用搜索框中输入的字母提供的建议进行搜索。查询字母为字母?

例子:

我在数据库中这句话:salam, salavat, sabos, sandal, sefid, siah and ...
我在搜索框中输入:s - 显示此 话 - > salam, salavat, sabos, sandal, sefid, siah
现在,如果 类型:sa - - 显示此单词 - > salam, salavat, sabos, sandal,
如果键入:sala - 显示这句话 - > salam, salavat
如果键入:salam - 显示这句话 - > salam

我使用jQuery事件.keyup()(KEYUP工作正常),并使用笨的后端(在codeigniter中查询不是我想要的)。

见我的查询(在此查询,$find包含已输入的序列,和我使用like关键词在数据库中搜索):

$find = $this->input->post('find'); 
    $where = "date LIKE '$find' OR 
      name LIKE '$find' OR 
      star LIKE '$find' OR 
      address LIKE '$find' OR 
      number_phone LIKE '$find' OR 
      type LIKE '$find' OR 
      service LIKE '$find' OR 
      units LIKE '$find' OR 
      useradmin LIKE '$find'"; 

$query = $data['results'] = $this->db->query("SELECT @rownum:[email protected]+1 rownum, t.* 
     FROM (
     SELECT * 
     FROM my_table 
     WHERE 
      $where 
     ORDER BY id desc 
     LIMIT $offset, $coun_page  
     ) t, 
     (SELECT @rownum:=0) r"); 

下面的查询工作,但我不能使用它因为rownum

$this->db->order_by("id", "desc")->like('name', $name)->get('my_table') 

我如何与rownum建议吗?

回答

5

要匹配子字符串与LIKE查询,您需要使用通配符,SQL中的通配符是百分比字符%

E.g.

WHERE foo LIKE '%bar%'将找到列foo包含子字符串'bar'的所有行。

WHERE foo LIKE 'bar%'将找到列foo以子串'bar'开头的所有行。

WHERE foo LIKE '%bar'将找到列foo以子字符串'bar'结尾的所有行。

PS。为了避免与(可能)保留的名称发生冲突(如datetype),在后面的标记中包含列名总是一个好主意。

SELECT `column1`, `column2` FROM `table` WHERE `column3` = 'value' 
+0

OK,坦克,现在如果有数据库的话'好车,好,好,好car'我们搜查字'nice':怎么能** ORDER BY **(列表)的,如:'好,不错,漂亮的车,漂亮的车,或者如果搜索到的单词“漂亮的车”列表像:“漂亮的车,漂亮的车,漂亮,漂亮”? –

+2

不要在一个问题中提出多个问题。当您的原始问题以满足您的方式回答时,请关闭它(批准正确的答案)并提出后续问题作为新问题。 –