2011-08-17 171 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

不要在一個問題中提出多個問題。當您的原始問題以滿足您的方式回答時,請關閉它(批准正確的答案)並提出後續問題作爲新問題。 –