[請益] mysql大量搜尋問題

看板PHP作者 (jimpop)時間17年前 (2008/08/28 23:48), 編輯推噓9(907)
留言16則, 11人參與, 最新討論串1/1
這個問題有爬過文了~~ 但好像都不是我想要的..... 問題內容是: 想做一個搜尋功能~像是論壇的那種... 也就是可以搜尋許多關鍵字如: 綠茶 紅茶 藍茶 這樣當三個關鍵字去搜尋.... 然後區域也有指定..就是資料庫中的資料表 如: name place 這樣..兩個 也就是...sql語法會像是.. SELECT * FROM xxx WHERE name LIKE %紅茶% 這樣寫好像沒什麼問題~~可以正常搜尋出我要的資料!! 可是...如果有20個關鍵字~搜尋兩個資料表... 那不就要寫成這樣... SELECT * FROM xxx WHERE name LIKE %紅茶% OR name LIKE %綠茶% OR name LIKE %藍茶% ...等 這樣不就..or個39次嗎?40個敘述句!! 真的查詢多個東西要這樣嗎? ************我的想法*************** 我有想到一個方法... 可是還沒開始寫~想問問大家意見!! 就是把每個關鍵字當成一次的select查詢 如: SELECT * FROM xxx WHERE name LIKE %紅茶% OR place LIKE %紅茶% 用迴圈跑...一個關鍵字跑一次~也就是有三個關鍵字就會跑三次!! 然後把資料存入陣列..資料庫中的serial當陣列的索引! 每次迴圈跑時會比對serial中的數字! 如果一樣~就不寫入迴圈... 這樣跑完再列出資料! 不知道這樣....是不是會比較好呢?還是比較費時呢? 想問問大家的意見!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.229.193.162

08/29 00:02, , 1F
用 IN 這個條件查詢
08/29 00:02, 1F

08/29 02:40, , 2F
看不出來跟 PHP 有啥關係...
08/29 02:40, 2F

08/29 09:16, , 3F
有40個or就加40個到一個sql查詢阿,用程式做不困難吧
08/29 09:16, 3F

08/29 13:24, , 4F
樓上兩位真冷淡
08/29 13:24, 4F

08/29 16:35, , 5F
不知若是這種搜尋有沒有最佳化語法?
08/29 16:35, 5F

08/29 16:50, , 6F
用regexp吧...like 中文有時會有問題...
08/29 16:50, 6F

08/29 20:18, , 7F
先查name欄位 把找到的資料記住他的id,查完在查place
08/29 20:18, 7F

08/29 20:18, , 8F
查place時 一樣記住找到資料的id
08/29 20:18, 8F

08/29 20:18, , 9F
最後在找出這些id的資料
08/29 20:18, 9F

08/29 23:04, , 10F
不知道做index並建立view 最後php上用sql cache也許
08/29 23:04, 10F

08/29 23:10, , 11F
可節省跑的時間
08/29 23:10, 11F

08/30 01:16, , 12F
嗯謝謝各位...我試試看再來回報!!
08/30 01:16, 12F

08/30 14:03, , 13F
用MATCH () AGAINST ?
08/30 14:03, 13F

08/30 17:50, , 14F
我覺得要用IN耶XD,SQL功力不夠沒辦法給建議
08/30 17:50, 14F
最近試了幾個... 發現regexp應該是比較適合的!! 這是我查網路上與自己測試的~不知有沒有錯~~ IN好像不適合! 因為它似乎一定要是完全符合的字才有辦法!! 譬如有一字串是 "Hello!你好嗎?" 它一定要是 "Hello!你好嗎?" 這樣才行!! Hello 或是 你好 這樣它都搜不到!! 用%%它也不行!~~~ MATCH() AGAINST() 試了一下...似乎不能是中文!! 只能是數字或是英文~~~ 以上測試~資料都從網路來~~不知這樣有沒有錯@? regexp可以用 正規表示法 所以可以一次把全部關鍵字寫入 但還是有個問題~~~ 三個資料表~~~還是要寫三次相同的正規表示法... 總覺得~~是不是可以省略那兩次~~正規表示法寫一次就行了!!?? ※ 編輯: jimpop 來自: 125.229.193.25 (08/31 00:36) ※ 編輯: jimpop 來自: 125.229.193.25 (08/31 00:37)

09/01 03:55, , 15F
才三個資料表而已...= =自己寫會怎樣
09/01 03:55, 15F

09/01 09:11, , 16F
當然不會怎樣壓!如果有不重複的方法~當然就用好方法
09/01 09:11, 16F
文章代碼(AID): #18jiZ1rA (PHP)
文章代碼(AID): #18jiZ1rA (PHP)