php
  • mysql
  • 2014-02-21 63 views 2 likes 
    2

    我無法在互聯網上找到答案,可能是因爲我不知道搜索的正確術語/專業術語。MySQL全文搜索找不完全匹配

    我使用自己的搜索功能從我的表中獲取行。 我有三排與此輸入(不帶引號)列:

    "食" 
    "食べる" 
    "食糧" 
    

    現在,當我搜索「」我希望查詢返回所有這三種結果。但我只收到第一個「」,我的查詢中返回完全匹配。我怎樣才能抓住他們呢?

    我的查詢:

    $sw = '食'; 
        $query = 'SELECT *, MATCH(word) AGAINST("'.$sw.'") as score FROM wordlist WHERE MATCH(word) AGAINST("'.$sw.'") ORDER BY score DESC;'; 
    

    我感謝所有幫助。

    編輯:添加%不起作用,如「%'。$ sw。'%」。迄今爲止的答案都沒有效果。 :/

    +0

    也許'LIKE'更好的適合你在這種特殊情況下 – Joshua

    回答

    1

    使用LIKE

    $sw = '食'; 
    $query = ' 
         SELECT *, MATCH(word) AGAINST("'.$sw.'") as score 
         FROM wordlist 
         WHERE work LIKE "'.$sw.'%" 
         ORDER BY score DESC'; 
    
    +0

    這將返回0的結果。 – Harpo

    0

    ,你可以用這個,

    'SELECT *, MATCH(word) AGAINST("'.$sw.'") as score FROM wordlist WHERE MATCH(word) LIKE '%'.$sw.'%' ORDER BY score DESC;' 
    

    ,而不是你自己的查詢

    +0

    給出錯誤:您的SQL語法中有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以在'LIKE'%食品%「ORDER BY分數附近使用正確的語法。DESC – Harpo

    0

    試試這個:

    $sw = '食'; 
    $query = 'SELECT *, MATCH(word) AGAINST("'.$sw.'") as score FROM wordlist WHERE word LIKE "%'.$sw.'%" ORDER BY score DESC;'; 
    

    此外,你舒了一口氣K出逃,SQL注入和準備語句。

    +0

    返回0結果。 – Harpo

    0

    也許你應該使用這樣的比較,但如果你想(留下來使用MATCH()反對)試試這個:

    $sw = '食'; 
        $query = 'SELECT *, MATCH(word) AGAINST("+'.$sw.'") as score FROM wordlist WHERE MATCH(word) AGAINST("+'.$sw.'") ORDER BY score DESC;'; 
    
    +0

    我實際上已經在關鍵字之前使用了+。但它不起作用。我仍然只返回第一行。 – Harpo

    +0

    你有一個全文索引的列字?你可以添加這個: ALTER TABLE wordlist ADD FULLTEXT(word); 添加索引並使用LIKE比較查詢應該返回3行(它爲我工作) – iubema

    +0

    我確實有這個。好吧,它不適合我的話很奇怪......:/謝謝,如果你有更多的想法,請拍攝:) – Harpo

    相關問題