我有一個MySQL數據庫例如所謂的「關鍵字」字段關鍵字的列表中記錄的關鍵字字段包含3個樣本記錄MYSQL匹配關鍵字列表逗號分隔文本字段
KEYWORD LIST 1: tree,apple,banana,cherry,flower,red apple,pink cherry,cat,mouse
KEYWORD LIST 2: cat,mouse,apple,red apple,flower,red appleberry
KEYWORD LIST 3: apple, red appleberry, flower
的關鍵字列表不是一個數組 - 只是一個mysql數據庫中的文本字段,它有很多其他字段。
當我運行從我所看到的一個MYSQL SELECT查詢「到目前爲止,」有兩種方式:1)像%% b)針對
比賽比方說,我想請對單詞的查詢「蘋果」
SELECT *從哪裏表
LIKE「%蘋果%」的關鍵字這將彈出包含單詞「蘋果」,包括以上,但它並不一定給我任何順序記錄記錄更高或更低。我不得不做的結果後過濾查詢。
假如我是在我的查詢更詳細,並選擇了「紅蘋果」它仍然會顯示一個比賽,但我不一定會得到具有關鍵字列表1比2或3
有人更相關使用對陣代替
SELECT *, MATCH(Keywords) AGAINST('apple') AS Score
FROM table
WHERE Keywords like '%red apple%'
ORDER BY score DESC;
這是朝着正確的方向肯定航向建議 - 但將不會通過精確匹配的結果被人發現更多相關的排序。相關性將基於關鍵字列表中出現「蘋果」一詞的多少次重複(這是所有搜索引擎選擇完全忽略關鍵字的古老原因) - 您是否看到我要與此相伴?
我正在尋找的是在MYSQL中處理大部分邏輯,而不是像其他人所說的那樣將其讀入數組並在PHP中處理。因此這個簡單的例子。
下面是查詢應該給它應該如何:
1)如果我的查詢是「蘋果」的關鍵字列表1應顯示第一
2)如果我的查詢是「紅蘋果」,那麼關鍵字列表2應該顯示首先是因爲'red apple'這個詞在關鍵字列表的FRONT處更接近於字符串的開頭。
因爲LIKE %%
關鍵字列表3會出現,而不是「紅蘋果」,即使比賽是「紅色appleberry」,但
(這將是最簡單的MySQL是否有某種'explode'函數可以指定逗號(',')作爲匹配中的分隔符,但我不知道任何這樣的方法,是嗎?當然,您必須將整個結果列表讀入3)假設我搜索'紅蘋果',這裏是bug:我仍然會在'紅蘋果'(記錄3)上找到一個匹配項, - 我不想那樣。記錄2應顯示,然後記錄1,甚至不顯示記錄3.
這是一個討論和一個查詢。任何人有任何建議?
我自己的答案: 包括在查詢的 而不是搜索的「紅蘋果」搜索逗號「紅蘋果」 但如果用戶把之間的空間 - 在末端或者其關鍵字列表?
問題: 我們如何在MYSQL的逗號分隔文本字段中搜索特定的SCORE,使用精確的單詞(而不是片段)來創建ORDERED結果列表。
儘管紅蘋果和紅蘋果是用逗號分隔的兩個不同的短語,但到目前爲止的每一次嘗試仍將使關鍵字列表3顯示高於2。
謝謝!來!我們討論一下!
棧是Q&A網站不是一個討論參見[文章](http://meta.stackexchange.com/questions/13198/where-我可以找到有趣的編程討論) – xQbert
爲什麼這些關鍵字全部卡在一個列中而不是另一個表中? –
您的數據庫設計混亂了。有了這個設計,你就不會得到你想要的滿足和高性能的方式。 – Reeno