我正在根据搜索框中输入的字母提供的建议进行搜索。
示例:
我在数据库中有这样的字词:
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(在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:=@rownum+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
获取建议?
答案 0 :(得分:5)
为了使子字符串与LIKE
查询匹配,您需要使用通配符,在SQL中,该字符是百分比字符%
。
E.g。
WHERE foo LIKE '%bar%'
会找到列foo
包含子字符串'bar'
的所有行。
WHERE foo LIKE 'bar%'
会找到列foo
以子字符串'bar'
开头的所有行。
WHERE foo LIKE '%bar'
会找到列foo
以子字符串'bar'
结尾的所有行。
PS。在后面的刻度中包含列名称总是一个好主意,以避免与(可能)保留名称冲突,例如date
和type
。
SELECT `column1`, `column2` FROM `table` WHERE `column3` = 'value'