根據(jù)"最左匹配"原則,將上面的sql改變成
創(chuàng)新互聯(lián)建站是一家專注于做網(wǎng)站、網(wǎng)站建設(shè)與策劃設(shè)計(jì),依安網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專注于網(wǎng)站建設(shè)十余年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:依安等地區(qū)。依安做網(wǎng)站價(jià)格咨詢:13518219792
這時(shí)候可以看見sql走了索引(后通配 走索引,前通配 走全表),但是根據(jù)“最左匹配”原則CatTom是匹配不到的。
因此我們使用其他的模糊查詢寫法:
1.1.普通用法: locate() 只要找到返回的結(jié)果都大于0(即使是查詢的內(nèi)容就是最開始部分),沒有查找到才返回0;
1.2. 指定其實(shí)位置:
LOCATE('substr',str,pos)方法,返回查詢字段在被查詢下的索引。第一個(gè)為需要查詢的內(nèi)容,第二個(gè)為字段名稱,第三個(gè)代表第幾個(gè)匹配(1就是返回第一個(gè)匹配到的值,5就是第5個(gè)匹配到的值,最大不能超過最后一個(gè)匹配的索引,不然就是返回0。
position可以看做是locate的別名,功能跟locate一樣
功能跟locate一樣,唯一不同的是方法參數(shù)位置不同
返回str2中str1所在的位置索引,其中str2必須以","分割開。
輸出結(jié)果
比較簡單的方式,可以對id,username,money這些需要檢索的字段,創(chuàng)建全文索引,然后通過全文索引來查詢
CREATE PROCEDURE tes(in ke varchar(50))
begin
select * FROM bookinfo WHERE keyWords like '%" +ke+ "%';
end
你上面寫的是 “四不像”,既不像函數(shù),又不像存儲過程~~~
CREATE PROCEDURE testDemo
@key varchar(20)
as
begin
declare @sql as VARCHAR(200)
set @sql ='select * FROM bookinfo WHERE 1 = 1 and keyWords like %' + @key + '%'
end
1、如果你什么也沒有輸入的話,sql語句就如下:
select * from tablename where name like '%%';
這樣的話就是 name 等于任何字符都會被查出,當(dāng)然所有內(nèi)容都會出來了。
2、這不是問題,從查詢的設(shè)計(jì)角度看,什么都不輸入自然是要匹配所有數(shù)據(jù),相反輸入了東西就是匹配它了。
*****************
補(bǔ)充:
*****************
如果你想什么都不輸入的時(shí)候什么也不返回的話方法如下:
在后臺寫兩個(gè)sql,類似如下
if ($name == ""){
$exec="select * from tablename where 1=2";
}else{
$exec="select * from tablename where name like '%$name%'";
}
---
以上,希望對你有所幫助。