比如我輸入關鍵字 “ 真心 ” 可以把“ 我真的已經把心給了你 ” 這句話搜出來,如何用php實現?請解高手解答。
回複討論(解決方案)
那要看你用什麼去實現了
如果是資料庫的話 資料量不大 可以用 like
那要看你用什麼去實現了
如果是資料庫的話 資料量不大 可以用 like
是從資料庫裡某欄位中檢索
那要看你用什麼去實現了
如果是資料庫的話 資料量不大 可以用 like
現在的問題是關鍵字被拆分開並在包括被拆分開的欄位中檢索,這個用like怎麼實現
加個表,欄位
關聯id,關鍵詞
在資料增加修改時候,php迴圈你的詞庫,如果有這些詞就把這些詞放到這個表裡,搜尋時候搜尋這個表
最基礎的 SQL模糊查詢
$ar = preg_split("//u", '真心', -1, PREG_SPLIT_NO_EMPTY);$where =array();foreach($ar as $v) $where[]=" 欄位 like '%$v%'";$sql="select * from tt " ;$sql .= empty($where) ? '' : ' where ' . join(' and ', $where);echo $sql;
樓上寫的 複雜一點,但通用
其實就是 把你的 關鍵字 迴圈 分割一下 分別LIKE
WHERE KWORD LIKE '%真%' AND KWORD LIKE '%心%' 這個只有兩個字都匹配了 才搜出來
WHERE KWORD LIKE '%真%' OR KWORD LIKE '%心%' 這個匹配一個就可以搜出來
$ar = preg_split("//u", '真心', -1, PREG_SPLIT_NO_EMPTY);$where =array();foreach($ar as $v) $where[]=" 欄位 like '%$v%'";$sql="select * from tt " ;$sql .= empty($where) ? '' : ' where ' . join(' and ', $where);echo $sql;
這個是不是會把帶"真"的欄位全部搜尋出來,並把帶"心"的欄位全部搜尋出來?
事實上我的要結果是:假如這個欄位只包括一個"真"字,這個欄位不會被搜尋出來,比如:“我真的好喜歡” 這個不會被搜出來,或者“我的心情很好”這個也不會搜出來。
而是包括“真心” 或者包括 “真 ”和 “心” 的欄位會被搜出來。
比如:我真心實意的喜歡。這句話會被搜出來。或者“ 我真的已經把心給了你 ” 這句話也會被搜出來。
這個被用在辦公用品銷售網站搜尋產品上,現在遇到這個 問題。
樓上寫的 複雜一點,但通用
其實就是 把你的 關鍵字 迴圈 分割一下 分別LIKE
WHERE KWORD LIKE '%真%' AND KWORD LIKE '%心%' 這個只有兩個字都匹配了 才搜出來
WHERE KWORD LIKE '%真%' OR KWORD LIKE '%心%' 這個匹配一個就可以搜出來
我要的結果是這樣的,你開啟下面的網址,輸入 “檔案透明” 這四個字看下效果:
http://www.staples.cn/word/%E6%96%87%E4%BB%B6%E9%80%8F%E6%98%8E
加個表,欄位
關聯id,關鍵詞
在資料增加修改時候,php迴圈你的詞庫,如果有這些詞就把這些詞放到這個表裡,搜尋時候搜尋這個表
不現實,這樣的字型檔太龐大了
$ar = preg_split("//u", '真心', -1, PREG_SPLIT_NO_EMPTY);$where =array();foreach($ar as $v) $where[]=" 欄位 like '%$v%'";$sql="select * from tt " ;$sql .= empty($where) ? '' : ' where ' . join(' and ', $where);echo $sql;
這個是不是會把帶"真"的欄位全部搜尋出來,並把帶"心"的欄位全部搜尋出來?
事實上我的要結果是:假如這個欄位只包括一個"真"字,這個欄位不會被搜尋出來,比如:“我真的好喜歡” 這個不會被搜出來,或者“我的心情很好”這個也不會搜出來。
而是包括“真心” 或者包括 “真 ”和 “心” 的欄位會被搜出來。
比如:我真心實意的喜歡。這句話會被搜出來。或者“ 我真的已經把心給了你 ” 這句話也會被搜出來。
這個被用在辦公用品銷售網站搜尋產品上,現在遇到這個 問題。
樓主為什麼不先試一下?
$ar = preg_split("//u", '真心', -1, PREG_SPLIT_NO_EMPTY);$where =array();foreach($ar as $v) $where[]=" 欄位 like '%$v%'";$sql="select * from tt " ;$sql .= empty($where) ? '' : ' where ' . join(' and ', $where);echo $sql;
這個是不是會把帶"真"的欄位全部搜尋出來,並把帶"心"的欄位全部搜尋出來?
事實上我的要結果是:假如這個欄位只包括一個"真"字,這個欄位不會被搜尋出來,比如:“我真的好喜歡” 這個不會被搜出來,或者“我的心情很好”這個也不會搜出來。
而是包括“真心” 或者包括 “真 ”和 “心” 的欄位會被搜出來。
比如:我真心實意的喜歡。這句話會被搜出來。或者“ 我真的已經把心給了你 ” 這句話也會被搜出來。
這個被用在辦公用品銷售網站搜尋產品上,現在遇到這個 問題。
樓主為什麼不先試一下?
試過了,可用,非常感謝